【问题标题】:Selenium Webdriver for webscraping on multiple websites concurrently?Selenium Webdriver 同时在多个网站上进行网页抓取?
【发布时间】:2020-03-24 16:10:45
【问题描述】:

我正在使用 Selenium Webdriver 对机票价格进行网页抓取。我希望我的代码能够搜索多次旅行的航班价格。截至目前,我的代码仅适用于 1 个目的地。

我在网上找到的大多数答案都涉及对多个目标的特定 URL 使用 for 循环,这不适用于我的情况,因为 URL 取决于我选择的不同目标。

任何人都知道如何同时搜索这些价格而无需等待单个搜索完成?或者也许是一种更快的方法?

谢谢!

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver web-scraping


    【解决方案1】:

    我相信您可以使用MultiPoolProcess 同时获取航班。这是我使用 selenium 的一个示例:

    执行 selenium 函数的脚本:

    # MultiProcess
    from subprocess import Popen
    from concurrent.futures import ProcessPoolExecutor, wait, FIRST_EXCEPTION, as_completed
    
    urls = [url1, url2, url3]
    N = 4 # Number of processors that you want to use
    
    # Execute each bot
    with ProcessPoolExecutor(N) as executor:
        for url in urls:
            command = ["python", "mySeleniumScript.py", url]
            future = executor.submit(Popen,command)
            self.futures.append(future)
    
    

    在这种情况下,您的包含 selenium scraper 的 python 脚本应该从输入中解析 url。像这样:

    mySeleniumScript.py

    from selenium import webdriver
    import sys
    
    url = sys.argv[1]
    driver = webdriver.Firefox()
    driver.get(url)
    
    *** Your scraper logic here ***
    

    希望这能为您指明正确的方向,让我知道进展如何!

    【讨论】:

    • 对不起,我对硒很陌生。我已经尝试阅读您附加的链接,但我似乎无法理解它。据我了解,您的代码将要求我在urls = [url1, url2, url3] N = 4 部分中提供多个页面的 URL?对吗?
    • 另外,为什么我们要使用脚本的第一个参数? (url = sys.argv[1])
    • 仅供参考,它是 scrape(以及 scrapingscrapescrape)而不是 scrapper
    猜你喜欢
    • 1970-01-01
    • 2019-04-03
    • 2019-04-06
    • 2019-06-23
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多