【问题标题】:Maximizing bandwidth use in web crawler [closed]最大化网络爬虫中的带宽使用[关闭]
【发布时间】:2016-03-21 21:25:50
【问题描述】:

我目前在一个专注于新闻网站的网络爬虫中工作。但是它花费的时间太长了,我相信这是因为脚本当时打开一页,将其废弃,然后转到另一页。所以有时间发送请求,从服务器获取响应等等。有没有一种方法可以让我每次打开多于一个页面并最大限度地利用我的带宽?

def get_links(url):
    html = urlopen(url)
    bsObj = bs(html)
    for link in bsObj.find_all('a', href=re.compile("^(http://www1.folha.uol.com.br/)(.)*$")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in urls:
                urls.add(link.attrs['href'])
                to_crawl.add(link.attrs['href'])
    if bsObj.find(attrs={'itemprop':'articleBody'}):
        articles.add(url)
        page_append(url)
        print(url)
    urls_crawled.add(url)

【问题讨论】:

  • 你目前在做什么?使用 python 抓取时通常建议使用 Scrapy:scrapy.org
  • 有可能,展示你到目前为止所做的事情。
  • 我更新了获取每一页的部分!谢谢!

标签: python web-scraping web-crawler


【解决方案1】:

你的直觉是正确的。您的代码一次处理一页,并且您没有利用所有带宽。 您可能想要使用 cmets (scrappy.org) 中提到的某些特定库或查看线程。 https://docs.python.org/2/library/threading.html

请注意,使用线程并不像在多个线程中启动代码那么简单。您必须协调他们如何访问您的articles 列表。您将需要使用线程安全的东西。 https://docs.python.org/2/library/queue.html

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多