【问题标题】:parallelize beautiful soup scraper in python在 python 中并行化漂亮的汤刮板
【发布时间】:2018-10-19 16:06:03
【问题描述】:

我想并行化我的抓取脚本,该脚本是用 python 编写的,使用漂亮的汤。尽管阅读了它,但我对如何让它在我的代码中工作感到困惑。 我现在要做的是将链接列表作为输入并打开几个浏览器/选项卡以将此 URL 作为输入。后来显然我想包括我的整个代码并从每一面刮下来。但我无法让这第一步发挥作用。

这是我的尝试:

Test_links = ['https://www.google.com/maps', 'https://www.google.co.uk/? 
gfe_rd=cr&dcr=0&ei=3vPNWpTWOu7t8weBlbXACA', 'https://scholar.google.de/']

def get_URL(Link):
    browser = webdriver.Chrome(chrome_options = options)
    browser.get(Link)

if __name__ == '__main__':
    pool = Pool(processes=5)
    pool.map(get_URL, Link)

【问题讨论】:

  • 您在使用此代码时遇到了什么问题?是否只打开一个浏览器/标签页?
  • 我收到此错误消息:文件“C:\ProgramData\Anaconda3\lib\multiprocessing\pool.py”,第 644 行,在 get raise self._value TypeError: get_URL() 位置为 0参数,但给出了 1
  • 我认为 (Link) 作为 get_URL 的参数存在问题。它期望 get_URL 没有参数,但看起来您将 Link 映射到它。
  • 是的,所以这里的 Link 实际上应该是 Test_links。那么如何让 get_URL 期望参数 Test-links,因为这显然是我需要在 URL 上调用的内容?
  • 在下面查看我的答案,我认为这可能是您的命名问题。

标签: python web-scraping parallel-processing beautifulsoup


【解决方案1】:

我不确定这是否适合您,但我认为您的命名存在问题。尽量避免大写变量,因为我认为它们与对象混淆了。你可以试试这样的方法,看看这个理论是否正确。

test_links = ['https://www.google.com/maps', 'https://www.google.co.uk/? 
gfe_rd=cr&dcr=0&ei=3vPNWpTWOu7t8weBlbXACA', 'https://scholar.google.de/']

def get_URL(test_links_list):
    browser = webdriver.Chrome(chrome_options = options)
    browser.get(test_links_list)

if __name__ == '__main__':
    pool = Pool(processes=5)
    pool.map(get_URL, test_links)

我不确定 browser.get() 是否会获取一个列表,您可能需要遍历调用浏览器的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2013-11-27
    • 2018-01-13
    • 2020-06-14
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多