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 字典中获取最小值