【发布时间】:2018-02-23 11:01:22
【问题描述】:
我在 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 pages 网站上获取所有链接,然后从这些链接中获取所有链接,依此类推,直到时间结束或发生错误。
我想在 Scrapy 中重新创建这段代码,这样它就可以服从 robots.txt 并成为一个整体上更好的网络爬虫。我在网上研究过,我只能找到关于如何抓取特定域的教程/指南/stackoverflow/quora/博客文章(例如,allowed_domains=["google.com"])。我不想这样做。我想创建递归抓取所有网站的代码。
这不是什么大问题,但所有的博客文章等都只显示了如何从特定网站获取链接(例如,他的链接可能在列表标签中)。我上面的代码适用于所有锚标签,无论它在哪个网站上运行。
我不想在野外使用它,我需要它用于演示目的,所以我不会突然因为过度的网络抓取而惹恼每个人。
任何帮助将不胜感激!
【问题讨论】:
标签: python python-3.x scrapy web-crawler