我尝试使用Python中的Beautifulsoup解析50 000个url。 解析在循环中工作:
我发现解析一个页面的时间是15到18秒。从第一页开始,我会抓住20个元素。
为什么Beautifulsoup的工作如此之慢?如何在Python中加速Beautifulsoup?
答案 0 :(得分:6)
确保您了解瓶颈。
第一个也是主要的问题不是HTML解析 - 它是"解析在循环中工作"。
这意味着代码是同步/阻止 - 在完成当前的URL之前,您不会处理下一个URL。这绝对是不可扩展的。
要解决此问题,请切换到异步方法 - 切换到例如Scrapy
网络抓取框架 - 这是扩展网络抓取项目的最自然的举措。
另见:
答案 1 :(得分:1)
并行处理。
e.g。
import Queue
import threading
# will execute parrallel
def taskProcess(q, url):
q.put(beautifulSoupFunction(url))
urls = ["http://url1.com", "http://url2.com"]
q = Queue.Queue()
for u in urls:
t = threading.Thread(target=taskProcess, args = (q,u))
t.daemon = True
t.start()
s = q.get()
print s