如何在Python中加速Beautifulsoup?

时间:2016-12-21 06:39:28

标签: python python-2.7 beautifulsoup

我尝试使用Python中的Beautifulsoup解析50 000个url。 解析在循环中工作:

我发现解析一个页面的时间是15到18秒。从第一页开始,我会抓住20个元素。

为什么Beautifulsoup的工作如此之慢?如何在Python中加速Beautifulsoup?

2 个答案:

答案 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