脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 使用selenium+chromedriver+xpath爬取动态加载信息

使用selenium+chromedriver+xpath爬取动态加载信息

2022-09-20 12:27Bruce_Liuxiaowei Python

这篇文章主要介绍了使用selenium+chromedriver+xpath爬取动态加载信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用selenium实现动态渲染页面的爬取,selenium是浏览器自动化测试框架,是一个用于Web应用程序测试的工具,可以直接运行在浏览器当中,并可以驱动浏览器执行指定的动作,如点击、下拉、填充数据、删除cookie等操作,还可以获取浏览器当前页面的源代码,就像用户在浏览器中操作一样。该工具所支持的浏览器有IE浏览器、Mozilla Firefox以及Google Chrome等。

安装selenium模块

首先打开Anaconda Prompt(Anaconda)命令行窗口,然后输入“pip install selenium“命令(如果没有安装Anaconda, 可以在cmd命令行窗口中执行安装模块的命令),接着按下(回车)键,如下图:

使用selenium+chromedriver+xpath爬取动态加载信息

说 明

selenium有很多语言的版本,比如:Java、Ruby、Python等。

下载浏览器驱动

selenium模块安装完成以后还需要选择一个浏览器,然后下载对应的浏览器驱动,此时才可以通过selenium模块来控制浏览器的操作。这里选择Chrome浏览器Version 98.0.4758.80 (Official Build) (x86_64),然后在(http://chromedriver.storage.googleapis.com/index.html?path=98.0.4758.80/)谷歌浏览器驱动中下载浏览器驱动。如下图:

使用selenium+chromedriver+xpath爬取动态加载信息

说 明

在下载谷歌浏览器驱动时,根据自己的电脑系统下载对应的浏览器驱动。

selenium模块的使用

谷歌浏览器驱动下载完成后, 将名称为chromedriver.exe文件拖放到/usr/bin 目录下(python.exe文件的同级路径)。然后需要通过Python代码进行谷歌浏览器驱动的加载,这样才可以启动浏览器驱动并控制浏览器了。

针对不同浏览器有不同的driver。以下列出不同浏览器及其对应的driver,如下表:

Browers Driver Link
Chrome Chromedriver(.exe) http://chromedriver.storage.googleapis.com/index.html
Internet Explorer IEDriverServer.exe http://selenium-release.storage.googleapis.com/index.html
Edge MicrosoftWebDriver.msi http://go.microsoft.com/fwlink/?LinkId=619687
Firefox geckodriver(.exe) https://github.com/mozilla/geckodriver/releases/
PhantomJS phantomjs(.exe) http://phantomjs.org/
Opera operadriver(.exe) https://github.com/operasoftware/operachromiumdriver/releases
Safari SafariDriver.safariextz http://selenium-release.storage.googleapis.com/index.html

获取京东商品信息,示例代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :2/7/22 6:43 PM
# 文件      :获取京东商品信息.py
# IDE      :PyCharm
 
from selenium import webdriver  # 导入浏览器驱动模块
from selenium.webdriver.support.wait import WebDriverWait  # 导入等待类
from selenium.webdriver.support import expected_conditions as EC  # 等待条件
from selenium.webdriver.common.by import By                       # 节点定位
 
#from selenium.webdriver.chrome.service import Service
 
try:
    # 创建谷歌浏览器驱动参数对象
    chrome_options = webdriver.ChromeOptions()
    # 不加载图片
    prefs = {"profile.managed_default_content_settings.images": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    # 使用headless无界面浏览器模式
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    # 加载谷歌浏览器驱动
        driver = webdriver.Chrome(options = chrome_options, executable_path='chromedriver')
    # 请求地址
    driver.get('https://item.jd.com/12353915.html')
    wait = WebDriverWait(driver,10)    # 等待10秒
    # 等待页面加载class名称为m-item-inner的节点,该节点中包含商品信息
    wait.until(EC.presence_of_element_located((By.CLASS_NAME,"w")))
 
    # 获取name节点中所有div节点
    name_div1 = driver.find_element(By.XPATH,'//div[@class="sku-name"]')
    name_div2 = driver.find_element(By.XPATH, '//div[@class="news"]/div[@class="item hide"]')
    name_div3 = driver.find_element(By.XPATH, '//div[@class="p-author"]')
    summary_price = driver.find_element(By.XPATH, '//div[@class="summary-price J-summary-price"]')
    print('提取的商品标题如下:')
    print(name_div1.text)         # 打印商品标题
    print('提取的商品宣传语如下:')
    print(name_div2.text)         # 打印宣传语
    print('提取的编著信息如下:')
    print(name_div3.text)         # 打印编著信息
    print('提取的价格信息如下:')
    print(summary_price.text.strip('降价通知'))       # 打印价格信息
    driver.quit()  # 退出浏览器驱动
except Exception as e:
    print('显示异常信息!', e)

程序运行结果如下:

提取的商品标题如下:
零基础学Python(Python3.9全彩版)(编程入门 项目实践 同步视频)
提取的商品宣传语如下:
彩色代码更易学。Python编程从入门到实践书籍,网络爬虫、游戏开发、数据分析等深度学习。赠全程视频+源码+课后题+实物挂图+学习应用地图+电子书+图书答疑
提取的编著信息如下:
明日科技 著
提取的价格信息如下:
京 东 价
¥ 72.00 [9.03折] [定价 ¥79.80] 

selenium 模块的常用方法

selenium 模块支持多种获取网页节点的方法,其中比较常用的方法如下表:

selenium 模块获取网页节点的常用方法及描述

常用方法 描 述
driver.find_element_by_id() 根据id获取节点,参数为字符类型id对应的值
driver.find_element_by_name() 根据name获取节点,参数为字符类型name对应的值
driver.find_element_by_xpath() 根据XPATH获取节点,参数为字符类型XPATH对应的值
driver.find_element_by_link_text() 根据链接文本获取节点,参数为字符类型链接文本
driver.find_element_by_tag_name() 根据节点名称获取节点,参数为字符类型节点文本
driver.find_element_by_class_name() 根据class获取节点,参数为字符类型class对应的值
driver.find_element_by_css_selector() 根据CSS选择器获取节点,参数为字符类型的CSS选择器语法

说 明

上表所有获取节点的方法均为获取单个节点的方法,如需要获取符合条件的多个节点时,可以在对应方法中element后面添加s即可。

除了以上常用的获取节点的方法外,还可以使用driver.find_element()方法获取单个节点,使用driver.find_elements()方法获取多个节点。只是在调用这两种方法时,需要为其指定by与value参数。其中by参数表示获取节点的方式,而value为获取方式对应的值(可以理解为条件)。示例代码如下:

?
1
2
3
4
5
6
7
8
    # 获取商品信息节点中的所有div节点
name_div = driver.find_element(By.XPATH,'//div[@class="itemInfo-wrap"]').find_elements(By.TAG_NAME, 'div')
 
# 提取并输出单个div节点的内容
print('提取的商品标题如下:')
print(name_div[0].text)         # 打印商品标题
print('提取的商品宣传语如下:')         # 打印商品宣传语
print(name_div[1].text)   

程序运行结果如下:

提取的商品标题如下:
零基础学Python(Python3.9全彩版)(编程入门 项目实践 同步视频)
提取的商品宣传语如下:
彩色代码更易学。Python编程从入门到实践书籍,网络爬虫、游戏开发、数据分析等深度学习。赠全程视频+源码+课后题+实物挂图+学习应用地图+电子书+图书答疑
明日科技 著

说 明

以上代码中首先使用find_element()方法获取class值为“itemInfo-warp“的整个节点,然后在该节点中通过find_elements()方法获取节点名称div的所有节点,最后通过name_div[0].text,name_div[1].text获取所有div中第一个第二个div内的文本信息。

下面是By的其他属性及用法

By属性 用 法
By.ID 表示根据ID值获取对应的单个或多个节点
By.LINK_TEXT 表示根据链接文本获取对应的单个或多个节点
By.PARTIAL_LINK_TEXT 表示根据部分链接文本获取对应的单个或多个节点
By.NAME 根据name值获取对应的单个或多个节点
By.TAG_NAME 根据节点名称获取单个或多个节点
By.CLASS_NAME 根据class值获取单个或多个节点
By.CSS_SELECTOR 根据CSS选择器获取单个或多个节点,对应的value为字符串CSS的位置
By.XPATH 根据By.XPATH获取单个或多个节点,对应的value字符串节点位置

在使用selenium模块获取某个节点中的某个属性所对应的值时,可以使用get_attribute()方法来实现,示例代码如下:

?
1
2
3
# 根据XPath定位获取指定节点中的href地址
href = driver.find_element(By.XPATH, '//div[@id="p-author"]/a').get_attribute('href')
print('指定节点中的地址信息如下:')

程序运行结果如下:

指定节点中的地址信息如下:
https://book.jd.com/writer/%E6%98%8E%E6%97%A5%E7%A7%91%E6%8A%80_1.html

总 结

本案例中需要注意的是加载浏览器驱动,一定要指定chromedriver的路径。语法如下:

?
1
2
# 加载谷歌浏览器驱动
driver = webdriver.Chrome(options = chrome_options, executable_path='chromedriver'# 本例驱动与爬虫程序在同一路                                                                                                                                                                            径

关闭浏览器页面

?
1
2
driver.close():关闭当前页面
driver.quit():退出整个浏览器

到此这篇关于使用selenium+chromedriver+xpath爬取动态加载信息的文章就介绍到这了,更多相关selenium chromedriver xpath爬取内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_41905135/article/details/122835878

延伸 · 阅读

精彩推荐
  • PythonPython简明入门教程

    Python简明入门教程

    这篇文章主要介绍了Python简明入门教程,较为详细的分析了Python的基本概念及语法基础,有助于Python初学者更好的掌握Python的基本语法与使用技巧,需要的朋友...

    Cobra3382020-07-29
  • PythonPython使用os模块和fileinput模块来操作文件目录

    Python使用os模块和fileinput模块来操作文件目录

    这篇文章主要介绍了Python编程中使用os模块和fileinput模块来操作文件的方法,包括获取路径和创建爱你删除目录等基本操作的例子,需要的朋友可以参考下 ...

    乐晨1852020-08-06
  • Pythonpycharm2020.2 配置使用的方法详解

    pycharm2020.2 配置使用的方法详解

    这篇文章主要介绍了pycharm2020.2 配置使用的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    biass12222020-09-17
  • Pythonpython后端接收前端回传的文件方法

    python后端接收前端回传的文件方法

    今天小编就为大家分享一篇python后端接收前端回传的文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yangczcsdn12472021-05-10
  • Pythonpython代数式括号有效性检验示例代码

    python代数式括号有效性检验示例代码

    这篇文章主要给大家介绍了关于python代数式括号有效性检验的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    漫漫人生的翠色4732020-10-05
  • Python使用Flask和Django中解决跨域请求问题

    使用Flask和Django中解决跨域请求问题

    这篇文章主要介绍了使用Flask和Django中解决跨域请求问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    K先森~7412021-10-18
  • Pythonpython实现视频分帧效果

    python实现视频分帧效果

    这篇文章主要为大家详细介绍了python实现视频分帧效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    万三豹5082021-07-01
  • PythonPython 私有函数的实例详解

    Python 私有函数的实例详解

    这篇文章主要介绍了Python 私有函数的实例详解的相关资料,希望通过本文大家能掌握Python 私有函数的使用方法,需要的朋友可以参考下...

    lxgwm20082572020-12-07