蜘蛛穿线的最佳选择是什么?

时间:2014-10-02 15:13:31

标签: python multithreading web-crawler

我用Python编写了一个spidering脚本,效果很好。但是,完成需要很长时间(超过9小时,具体取决于网站的链接数量)。

我想在其中实现线程以减少时间,但我无法确定哪个部分最适合线程。乍一看,我会创建线程来获取每个页面的页面内容,然后锁定visited_urlsto_visit_urls数组,以确保所有内容都使用相同的列表。

但似乎可能花费大部分时间检查visited_urlsto_visit_urls数组中的重复项,因此以这种方式进行线程实际上会节省我那么多时间吗?有没有更好的方法来训练我的蜘蛛?

1 个答案:

答案 0 :(得分:0)

您应该使用grequests,它是请求的异步版本,允许您一次刮取多个URL,从而显着提高吞吐量。如果您遍历您的网址并处理子列表,这将非常有效。对于重复项,只需将列表转换为集合并返回将删除它们,因为本质上的集合不支持重复。

urls = [...]
reqs = [grequests.get(x) for x in urls]
resp = grequests.map(reqs)

https://github.com/kennethreitz/grequests