只更新一次 webdriver 并将其用于各种功能和循环
Only update webdriver for one time and use it for various functions and loops
我有一个简单的网络爬虫,我会循环使用它从 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)
一切正常,但我必须安装两次驱动程序,这很烦人。当我从数百个网站抓取数据时,我认为它大大减慢了程序的速度。而且感觉很糟糕。我尝试了两种方法,只安装一次驱动程序,并在各种功能和循环中使用它。
方法一:手动分配路径:
def update_driver():
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
然后,输出会包含安装驱动的路径,我会手动复制并赋值给一个变量,以便其他爬虫功能可以使用。
方法 1 的问题:
我必须复制并粘贴它。有没有办法让它自动化?也许我可以得到安装的输出并过滤它?
方法二:
使驱动程序成为全局变量。
方法二的问题:当驱动被多个url.
使用时会报错
问题
您正在 scrap
方法中使用驱动程序,这使得它启动浏览器的次数与 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()
我有一个简单的网络爬虫,我会循环使用它从 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)
一切正常,但我必须安装两次驱动程序,这很烦人。当我从数百个网站抓取数据时,我认为它大大减慢了程序的速度。而且感觉很糟糕。我尝试了两种方法,只安装一次驱动程序,并在各种功能和循环中使用它。
方法一:手动分配路径:
def update_driver():
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
然后,输出会包含安装驱动的路径,我会手动复制并赋值给一个变量,以便其他爬虫功能可以使用。
方法 1 的问题: 我必须复制并粘贴它。有没有办法让它自动化?也许我可以得到安装的输出并过滤它?
方法二: 使驱动程序成为全局变量。 方法二的问题:当驱动被多个url.
使用时会报错问题
您正在
一样多scrap
方法中使用驱动程序,这使得它启动浏览器的次数与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()