Web 服务 - 如何在 Python 中加速 Web 爬虫



我正在使用urllib.urlopen()方法和美女汤进行爬行。我对浏览速度不满意,我正在考虑 urllib 正在解析的内容,猜测它必须加载的不仅仅是 html。默认情况下,无法在文档中找到它是否读取或检查更大的数据(图像、闪存等)。

所以,如果urllib必须加载,即图像,flash,js...如何避免此类数据类型的GET请求?

尝试请求 - 它实现了 HTTP 连接池,从而加快了爬网速度。

此外,它比urllib更好地处理其他事情,如cookie,auth等,并且与BeautfulSoup配合得很好。

使用线程! 这超级简单。 下面是一个示例。 您可以根据需要更改连接数。

import threading, Queue
import urllib
urls = [
    'http://www.google.com',
    'http://www.amazon.com',
    'http://www.ebay.com',
    'http://www.google.com',
    'http://www.amazon.com',
    'http://www.ebay.com',
    'http://www.google.com',
    'http://www.amazon.com',
    'http://www.ebay.com',    
    ]
queue = Queue.Queue()
for x,url in enumerate(urls):
    filename = "datafile%s-%s" % (x,url)
    queue.put((url, filename))

num_connections = 10
class WorkerThread(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue
    def run(self):
        while 1:
            try:
                url, filename = self.queue.get_nowait()
            except Queue.Empty:
                raise SystemExit
            urllib.urlretrieve(url,filename.replace('http://',''))
# start threads
threads = []
for dummy in range(num_connections):
    t = WorkerThread(queue)
    t.start()
    threads.append(t)

# Wait for all threads to finish
for thread in threads:
    thread.join()

相关内容

  • 没有找到相关文章

最新更新