使用selenium+chromedriver+xpath爬取动态加载信息
使用selenium实现动态渲染页面的爬取,selenium是浏览器自动化测试框架,是一个用于Web应用程序测试的工具,可以直接运行在浏览器当中,并可以驱动浏览器执行指定的动作,如点击、下拉、填充数据、删除cookie等操作,还可以获取浏览器当前页面的源代码,就像用户在浏览器中操作一样。该工具所支持的浏览器有IE浏览器、Mozilla Firefox以及Google Chrome等。
安装selenium模块
首先打开Anaconda Prompt(Anaconda)命令行窗口,然后输入“pip install selenium“命令(如果没有安装Anaconda, 可以在cmd命令行窗口中执行安装模块的命令),接着按下(回车)键,如下图:
说 明
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.exe文件拖放到/usr/bin 目录下(python.exe文件的同级路径)。然后需要通过Python代码进行谷歌浏览器驱动的加载,这样才可以启动浏览器驱动并控制浏览器了。
针对不同浏览器有不同的driver。以下列出不同浏览器及其对应的driver,如下表:
获取京东商品信息,示例代码如下:
#_*_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+chromedriver+xpath爬取动态加载信息(二)https://developer.aliyun.com/article/1617934