Python:如何并行获取请求以最小化时间?

Posted

技术标签:

【中文标题】Python:如何并行获取请求以最小化时间?【英文标题】:Python: How to parallel get requests to minimize timing? 【发布时间】:2022-01-18 09:17:45 【问题描述】:

我对编程非常陌生,尤其是 *** 规则。

如果我遗漏了任何需要在问题中指出的重要信息,请告诉我。

我正在寻找一个简单的解决方案,以在 Python 上使用 selenium 模块并行我的 get 请求。

我在 tripadvisor.com 上有一个包含 10,000 个餐厅网络链接的列表。我希望我的脚本从每个链接中获取 html 数据并在某个 html 类名下找到一个文本。最后,我的脚本应该抓取每个文本并将其放入列表中链接旁边的字典中。

逐个链接按顺序发送获取请求将花费大量时间。

如何并行处理这些请求以最大限度地减少时间?

现在我的代码如下所示:

from selenium import webdriver

# PATH = 'path to driver'

driver = webdriver.Chrome(executable_path=PATH)

nans_dict = 

for i in nans_list:
    a = []
    driver.get('https://www.tripadvisor.com' + i)
    for element in driver.find_elements_by_class_name('drUyy'):
        a.append(element.text + ' ')
        nans_dict[i] = a

感谢您提前提供全面的答案。

【问题讨论】:

请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

这是执行此操作的一种方法。

创建一个字典,其键是 Tripadvisor URL 的重要部分,其值是一个列表。与“drUyy”类关联的文本附加到相关值。因此,当完成时,字典会包含与找到它的页面相关联的所有相关文本。

from selenium import webdriver
from selenium.webdriver.common.by import By
from threading import Thread

restaurants = 'Restaurant_Review-g186338-d783897-Reviews-Indian_Room-London_England.html': [],
'Restaurant_Review-g186338-d10460592-Reviews-Bonoo_Indian_Tapas-London_England.html': [],
'Restaurant_Review-g186338-d13544747-Reviews-Amrutha_Lounge-London_England.html': []

def process(r):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')

    with webdriver.Chrome(options=options) as driver:
        driver.get(f'https://www.tripadvisor.co.uk/r')
        for a in driver.find_elements(By.CLASS_NAME, 'drUyy'):
            restaurants[r].append(a.text)

def main():
    thread_list = []
    for r in restaurants:
        t = Thread(target=process, args=(r,))
        t.start()
        thread_list.append(t)
    for t in thread_list:
        t.join()
    print(restaurants)

if __name__ == '__main__':
    main()

【讨论】:

JCaesar,非常感谢您的解决方案!

以上是关于Python:如何并行获取请求以最小化时间?的主要内容,如果未能解决你的问题,请参考以下文章

最小化查询结果大小算法

向 lambda 函数添​​加附加逻辑以从 python 字典中获取最小值

我如何在这个数组中获取数据,如果条件使它成为python中距离最小的集群?

分析 Spring 应用程序以最小化启动时间

CSS,JS和图像的最小化技术,以避免对服务器的多个请求

如何获取核心数据中多个子模型的最小值