2017-03-08 50 views
1
from urllib import request 
import urllib 
from bs4 import BeautifulSoup as bs 

page = request.urlopen("http://someurl.ulr").read() 
soup = (page,"lxml") 

现在这个过程是非常缓慢的,因为它使一个请求解析数据, 经过指定的步骤,然后我们回到发出请求。网页抓取同时要求

- for example 



for links in findAll('a'): 
    print (links.href) 

然后我们又回到提出请求,因为我们想要刮另一个URL,如何加速这个过程?

我应该将URL的整个源代码存储在一个文件中,然后执行必要的操作(解析,查找我们需要的数据)---?

我有这个想法,因为从一个DoS(拒绝服务)脚本 使用导入袜子和线程进行大量的请求。

注意:这只是一个想法, 有没有一种更有效的方法呢?

+0

是的,使用['scrapy'](https://scrapy.org) – eLRuLL

+0

不,我爱我的汤,我会找到一种方式不会让我失望。 –

+0

你可以使用'scrapy'的汤。 Scrapy只向表中添加异步请求。 – eLRuLL

回答

2

这个最有效的方法很可能是使用asyncio,并在一个点产生尽可能多的python进程,因为你有线程。

asyncio documentation

,并打电话给你的脚本这样的:

for i in $(seq $(nproc)); do python yourscript.py $entry; done 

这将导致一个巨大的速度提升。为了进一步提高处理速度,您可以使用正则表达式解析器而不是Beautifulsoup,这使我的加速速度提高了大约5倍。

您也可以使用专门的库来完成此任务,例如scrapy

+0

嗯,这非常有用,我会更多地了解这一点。 我知道我不能只产生同一事物的许多实例,因为它会做同样的事情,并感谢你,eLRuLL只是指着我scrapy会看看我如何整合这一点。 我还有一个问题给你, 如果我试图抓举例子,你会推荐什么样的解决方案来绕过bot安全(不包括代理和时间延迟),我非常感谢帮助! –

+0

高度依赖于机器人安全实施。如果不知道这一点,我无法给你任何建议。在方法将运行在这些bot安全的东西,并解决它们。 – Sekuraz