需要有关如何加快网络爬虫的建议
Posted
技术标签:
【中文标题】需要有关如何加快网络爬虫的建议【英文标题】:Need advice on how to speed up web scraper 【发布时间】:2015-07-18 10:19:34 【问题描述】:我对此还是很陌生。我正在尝试从网页中提取数据,但是我实施的这种方法似乎有点慢。我使用时间模块来缩小延迟的原因。
requests.get(url)
花费了大部分时间(1-5 秒)
soup = BeautifulSoup(data.content)
持续大约 0.15 秒
请求总是这么慢吗?雅虎限制来自其服务器的请求的问题是什么?现在从 yahoo.com/finance 提取单个股票价格大约需要 2-5 秒,请求是主要问题,有什么想法吗?
【问题讨论】:
【参考方案1】:只是补充 Meghdeep 所说的话..
如果您按顺序提取多个 url,您应该尝试将代码重写为异步。抓取一页所需的时间不会改变,但异步您可以一次抓取多个页面。 (您可以为此使用 Python Twisted 或 Tornado 框架......或者您可以使用 Node.js 重写您的爬虫)
【讨论】:
好的,我会研究异步抓取。再说一次,我还是新手 不用担心。在某些时候,我们都是“新手”。这就是 *** 的用途。 :) 请注意:在执行此操作之前,请查看特定站点的 Robots.txt,以便查看最大连接数。假设他将抓取多个雅虎财务页面,他有可能超出允许的连接,雅虎将他拒之门外。 (当然是暂时的) 大家好,所以我转移到更快的互联网连接,但现在我收到一个错误:警告:根:某些字符无法解码,并被替换为替换字符。 我想这只是通过做一些研究就可以进行的某种编码,但它不再向我发送 html,所以当我尝试查找 时,Beautifulsoup 返回 None 类型标签 【参考方案2】:问题不在于请求。如果速度很慢,则可能是您的网络连接有问题。正如您正确指出的那样,也可能是雅虎速率限制请求。每个网站都有一个 robots.txt 文件,其中详细说明了他们关于网络爬虫和自动访问它们的政策。 无论如何,它不应该花这么长时间,但我会把它归结为互联网速度问题。尝试从您的浏览器访问该 URL,并检查加载所需的时间。
GET 请求是当您想从网站“获取”网页时发送的内容。当您在浏览器中输入 URL 并按 Enter 时,使用相同的 GET。因此,除非请求获取页面的时间与浏览器获取页面的时间之间存在显着差异,否则这就是互联网连接速度本身的问题。
【讨论】:
当您使用 requests.get(url) 时,检索源代码的速度是否与我的浏览器加载数据并显示它的速度相同? 是的,因为它们都采用了在所有平台上都一致的 GET 方法。 另外,是的,我现在的网速不是很好,我稍后会尝试使用更快的连接。 所以所有程序,所有语言,都使用 GET 请求与服务器交互? 这里有一个链接,它解释了 GET 如何是一种 HTTP 请求方法。 Http 是一种标准协议,因此无论平台如何,它的所有实现都是一致的。 w3schools.com/tags/ref_httpmethods.asp以上是关于需要有关如何加快网络爬虫的建议的主要内容,如果未能解决你的问题,请参考以下文章