我有一个简单的网络爬虫,我会在一个循环中使用它来抓取youtube视频中的信息,如下所示
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
def Scrap(url):
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
driver.get(url)
time.sleep(6)
#I will do some operations with the page source here
driver.close()
urls = ["https://www.youtube.com/watch?v=FWMIPukvdsQ", "https://www.youtube.com/watch?v=Ot4qdCs54ZE"]
for url in urls :
Scrap(url)一切都很好,但我不得不安装两次驱动程序,这是很烦人的。我认为当我从数百个网站上抓取数据时,它已经大大减慢了程序的速度。而且感觉很糟糕。我尝试过两种方法,只安装一次驱动程序,并在各种函数和循环中使用它。
方法1:手动分配路径:
def update_driver():
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())然后,输出将包括已安装驱动程序的路径,我将手动复制并分配给变量,以便其他爬虫函数可以使用。
方法1的问题:我必须复制和粘贴它。有什么办法让它自动化吗?也许我能得到安装的输出并过滤它?
方法2:使驱动程序成为全局变量。方法2的问题:当驱动程序被多个url使用时,它会报告错误。
发布于 2022-03-14 07:11:08
问题
您正在使用len(URLs)方法内部的驱动程序来启动浏览器,其次数与len(URLs)相同。
scrap方法中的浏览器driver.close,这应该在循环之后进行。。
解决方案
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
def Scrap(url):
driver.get(url)
time.sleep(1)
# I will do some operations with the page source here
urls = ["https://www.youtube.com/watch?v=FWMIPukvdsQ", "https://www.youtube.com/watch?v=Ot4qdCs54ZE"]
for url in urls:
Scrap(url)
driver.close()https://stackoverflow.com/questions/71462049
复制相似问题