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的整个源代码存储在一个文件中,然后进行必要的操作(解析,找到我们需要的数据)---?
我有这个想法,因为来自DoS(拒绝服务)脚本 使用导入socks和线程来发出大量请求。
注意:这只是一个想法, 有没有更有效的方法呢?
答案 0 :(得分:2)
最有效的方法很可能是使用asyncio,并且在某一点上产生与你有线程一样多的python进程。
并像这样调用你的脚本:
for i in $(seq $(nproc)); do python yourscript.py $entry; done
这将带来巨大的速度提升。为了进一步提高处理速度,你可以使用正则表达式解析器而不是Beautifulsoup,这给了我大约5倍的加速。
您也可以使用专门的库来完成此任务,例如: scrapy