首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只更新一次for驱动程序并将其用于各种函数和循环

只更新一次for驱动程序并将其用于各种函数和循环
EN

Stack Overflow用户
提问于 2022-03-14 00:51:55
回答 1查看 44关注 0票数 0

我有一个简单的网络爬虫,我会在一个循环中使用它来抓取youtube视频中的信息,如下所示

代码语言:javascript
复制
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:手动分配路径:

代码语言:javascript
复制
def update_driver():
    driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())

然后,输出将包括已安装驱动程序的路径,我将手动复制并分配给变量,以便其他爬虫函数可以使用。

方法1的问题:我必须复制和粘贴它。有什么办法让它自动化吗?也许我能得到安装的输出并过滤它?

方法2:使驱动程序成为全局变量。方法2的问题:当驱动程序被多个url使用时,它会报告错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-14 07:11:08

问题

您正在使用len(URLs)方法内部的驱动程序来启动浏览器,其次数与len(URLs)相同。

  • 关闭scrap方法中的浏览器driver.close,这应该在循环之后进行。

解决方案

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71462049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档