接上文使用selenium+chromedriver+xpath爬取动态加载信息(一)https://developer.aliyun.com/article/1617935
selenium 模块的常用方法
selenium 模块支持多种获取网页节点的方法,其中比较常用的方法如下表:
selenium 模块获取网页节点的常用方法及描述
说 明
上表所有获取节点的方法均为获取单个节点的方法,如需要获取符合条件的多个节点时,可以在对应方法中element后面添加s即可。
除了以上常用的获取节点的方法外,还可以使用driver.find_element()方法获取单个节点,使用driver.find_elements()方法获取多个节点。只是在调用这两种方法时,需要为其指定by与value参数。其中by参数表示获取节点的方式,而value为获取方式对应的值(可以理解为条件)。示例代码如下:
# 获取商品信息节点中的所有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的其他属性及用法
在使用selenium模块获取某个节点中的某个属性所对应的值时,可以使用get_attribute()方法来实现,示例代码如下:
# 根据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的路径。语法如下:
# 加载谷歌浏览器驱动
driver = webdriver.Chrome(options = chrome_options, executable_path='chromedriver') # 本例驱动与爬虫程序在同一路 径
关闭浏览器页面
1. driver.close():关闭当前页面
2. driver.quit():退出整个浏览器