”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Python动态网页抓取示例:selenium和webdriver的应用

Python动态网页抓取示例:selenium和webdriver的应用

发布于2024-09-02
浏览:457

Python dynamic web scraping example: application of selenium and webdriver

动态网页抓取通常会使用一些Python库,比如处理HTTP请求的requests、模拟浏览器行为的selenium、或者pyppeteer。下面的文章将重点介绍selenium的使用。

硒简介

selenium 是一个用于测试 Web 应用程序的工具,但它也经常用于 Web 抓取,特别是当需要抓取由 JavaScript 动态生成的 Web 内容时。 selenium可以模拟浏览器中的用户行为,例如点击、输入文本、获取网页元素等。

Python 动态网页抓取示例

首先,确保您已经安装了selenium。如果没有,可以通过pip安装:

pip install selenium

您还需要下载对应浏览器的WebDriver。 ‌假设我们使用Chrome浏览器,‌需要下载ChromeDriver并确保其路径已添加到系统环境变量中,‌或者您可以直接在代码中指定其路径。 ‌

这是一个获取网页标题的简单示例:‌

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Setting up webdriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# Open the webpage
driver.get('https://www.example.com')

# Get the webpage title
title = driver.title

print(title)

# Close the browser
driver.quit()

此脚本将打开 example.com,获取其标题并将其打印出来。 ‌

请注意,‌webdriver_manager 是一个自动管理 WebDriver 版本的第三方库。 ‌如果不想使用,也可以手动下载WebDriver并指定路径。 ‌

动态网页可能涉及 JavaScript 呈现的内容。 ‌selenium 可以等待这些元素加载后再进行操作,这非常适合处理此类网页。 ‌

在python中抓取动态网页时设置代理

使用Python爬取动态网页时,经常会用到代理。使用代理一方面可以避免很多障碍,另一方面也可以加快工作效率。

上面我们已经介绍了selenium的安装。另外,您还需要下载对应浏览器的WebDriver,并确保其路径已添加到系统的环境变量中,也可以直接在代码中指定其路径。
完成上述步骤后,我们就可以配置代理并抓取动态网页了:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Set Chrome options
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://your_proxy_ip:port')

# Specify the WebDriver path (if you have added the WebDriver path to the system environment variables, you can skip this step)
# driver_path = 'path/to/your/chromedriver'
# driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)

# If WebDriver path is not specified, the default path is used (make sure you have added WebDriver to your system environment variables)
driver = webdriver.Chrome(options=chrome_options)

# Open the webpage
driver.get('https://www.example.com')

# Get the webpage title
title = driver.title

print(title)

# Close the browser
driver.quit()

在此示例中,‌--proxy-server=http://your_proxy_ip:port 是配置代理的参数。‌‌ 您需要将 your_proxy_ip 和 port 替换为您实际使用的代理服务器的 IP 地址和端口号使用

如果您的代理服务器需要身份验证,‌您可以使用以下格式:‌

chrome_options.add_argument('--proxy-server=http://username:password@your_proxy_ip:port')

其中用户名和密码是您的代理服务器的用户名和密码。 ‌

运行上述代码后,‌selenium 将通过配置的代理服务器访问目标网页‌并打印出网页的标题。 ‌
如何指定ChromeDriver的路径?
ChromeDriver 是 Selenium WebDriver 的一部分。它通过WebDriver API与Chrome浏览器交互,实现自动化测试、网络爬虫等功能。 ‌
指定ChromeDriver的路径主要涉及到环境变量的配置。 ‌具体步骤如下:‌
1.查找Chrome的安装位置
您可以通过右键单击桌面上的 Google Chrome 快捷方式并选择“打开文件位置”来找到它。 ‌
2.将Chrome的安装路径添加到系统环境变量Path
这允许系统在任何位置识别 ChromeDriver。 ‌
3.下载并解压 ChromeDriver
确保下载与Chrome浏览器版本匹配的ChromeDriver,并将其解压为exe程序。 ‌
4.将ChromeDriver的exe文件复制到Chrome的安装路径
这样,当你需要使用ChromeDriver时,系统可以自动识别并调用它

以上就是selenium和webdriver在python动态网页爬取中的应用,以及爬取网页时如何避免。当然,你也可以通过上面的例子来练习实际操作。

版本声明 本文转载于:https://dev.to/lewis_kerr_2d0d4c5b886b02/python-dynamic-web-scraping-example-application-of-selenium-and-webdriver-3330?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-05-22
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe 中创建一个常数列,可以通过多种方式实现具有适用于所有行的任意值的Spark DataFrame。使用文字值(SPARK 1.3)在尝试提供直接值时,用于此问题时,旨在为此目的的column方法可能会导致错误。 df.withcolumn('new_colu...
    编程 发布于2025-05-22
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-05-22
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&华仪的函数时,在接受成员函数指针的函数时,要在函数上既要提供指针又可以提供指针和指针到函数的函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此...
    编程 发布于2025-05-22
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-05-22
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-22
  • CSS可以根据任何属性值来定位HTML元素吗?
    CSS可以根据任何属性值来定位HTML元素吗?
    靶向html元素,在CSS 中使用任何属性值,在CSS中,可以基于特定属性(如下所示)基于特定属性的基于特定属性的emants目标元素: 字体家庭:康斯拉斯(Consolas); } 但是,出现一个常见的问题:元素可以根据任何属性值而定位吗?本文探讨了此主题。的目标元素有任何任何属性值,属...
    编程 发布于2025-05-22
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-05-22
  • 为什么在我的Linux服务器上安装Archive_Zip后,我找不到“ class \” class \'ziparchive \'错误?
    为什么在我的Linux服务器上安装Archive_Zip后,我找不到“ class \” class \'ziparchive \'错误?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    编程 发布于2025-05-22
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-05-22
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-05-22
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-05-22
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-05-22
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-22
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-05-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3