我有一个包含数千个网址的列表。我想使用Python / Selenuim:
为了让它运行得更快,我希望并行运行大量这些进程,但我只能一次解决这个问题。
from selenium import webdriver
driver = webdriver.Chrome()
url_list = [
'https://www.instagram.com/p/Bj7NmpqBuSw/?tagged=style',
'https://www.instagram.com/p/Bj7Nic3Au85/?tagged=style'
]
for url in url_list:
driver.get(url)
driver.find_elements_by_class_name("class-name-for-profile-link")
driver.close()
我尝试使用大量浏览器标签
driver.switch_to.window(driver.window_handles[1])
但处理起来有点棘手。
如何并行运行此流程?
答案 0 :(得分:0)
您可以使用this循环并行。样品用法:
from joblib import Parallel, delayed
def do_stuff(url):
phantom = webdriver.PhantomJS('/path/to/phantomjs') # you can use any driver
phantom.get(url)
# do your stuff
phantom.close()
Parallel(n_jobs=-1)(delayed(do_stuff)(url) for url in urls) #execute parallel for all urls
答案 1 :(得分:0)
tl; dr 我创建了this gist,以给出一个简单的示例,说明如何并行运行简单的Selenium任务。您可以根据自己的目的进行调整。
并行化Selenium脚本的问题在于Selenium工人本身就是进程。上面的脚本使用两个FIFO queues,一个用于存储空闲的Selenium工作程序的ID,另一个用于存储要传递给工作程序的数据。后台主线程在这两个队列之间进行侦听,并将传入的数据分配给空闲的工作程序,从而在工作程序执行工作时将硒工作程序的ID移出工作程序队列。
要使代码适应您的目的,您要做的就是更改功能selenium_task
中的代码。希望这会有所帮助!