gpt4 book ai didi

python - Scrapy 从任何网站获取所有链接

转载 作者:行者123 更新时间:2023-11-28 17:09:06 24 4
gpt4 key购买 nike

我有以下 Python 3 网络爬虫代码:

import requests
from bs4 import BeautifulSoup
import re

def get_links(link):

return_links = []

r = requests.get(link)

soup = BeautifulSoup(r.content, "lxml")

if r.status_code != 200:
print("Error. Something is wrong here")
else:
for link in soup.findAll('a', attrs={'href': re.compile("^http")}):
return_links.append(link.get('href')))

def recursive_search(links)
for i in links:
links.append(get_links(i))
recursive_search(links)


recursive_search(get_links("https://www.brandonskerritt.github.io"))

代码基本上是从我的 GitHub 页面网站上获取所有链接,然后从这些链接中获取所有链接,依此类推,直到时间结束或发生错误。

我想在 Scrapy 中重新创建这段代码,这样它就可以服从 robots.txt 并成为一个整体上更好的网络爬虫。我在网上进行了研究,但只能找到有关如何抓取特定域(例如,allowed_domains=["google.com"])的教程/指南/stackoverflow/quora/博客文章。我不想这样做。我想创建可以递归地抓取所有网站的代码。

这不是什么大问题,但所有博客文章等都只展示了如何从特定网站获取链接(例如,他的链接可能位于列表标签中)。我上面的代码适用于所有 anchor 标记,无论它在哪个网站上运行。

我不想在野外使用它,我需要它用于演示目的,所以我不会突然用过多的网络抓取来惹恼每个人。

任何帮助将不胜感激!

最佳答案

scrapy 指南有一整节专门介绍 broad crawls .我建议您细化设置以成功执行此操作。

要在 scrapy 中重现您需要的行为,您必须

  • 在您的页面中设置您的起始网址。
  • 编写一个解析函数,跟踪所有链接并递归调用自身,将请求的 url 添加到蜘蛛变量中

一个未经测试的例子(当然可以改进):

class AllSpider(scrapy.Spider):
name = 'all'

start_urls = ['https://yourgithub.com']

def __init__(self):
self.links=[]

def parse(self, response):
self.links.append(response.url)
for href in response.css('a::attr(href)'):
yield response.follow(href, self.parse)

关于python - Scrapy 从任何网站获取所有链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48946320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com