0%

python selenium 操纵Chrome提取XPath

前言

XPath是一门在XML文档中查找信息的语言。XPath用于在XML文档中通过元素和属性进行导航。XPath在爬取提取数据中非常好用,但是通过Chrome或者Firefox提取的XPath,经常会遇到在Python lxml库中提取不到数据,因为浏览器对不标准的HTML文档都有纠正功能,而lxml库不会,而从本地HTML文件中提取XPath又很不方便,所以既然XPath是从浏览器中提取的,那么通过selenium操纵Chrome提取XPath就准确很多,能省很多事。

安装依赖

pip安装selenium

1
pip install selenium

要使用selenium操纵Chrome,还需要下载ChromeDriver点击下载(可能需要代理)对应版本的ChromeDriver

下载后解压到项目文件夹内即可。

代码示例

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
# 使用chrome打开一个本地HTML文件,然后提取xpath,因为我们通常都是先使用requests获取到请求结果,再进行xpath提取,比直接通过浏览器取HTML文件效率会高些。
from selenium import webdriver

def main():
# 文件位置
filename = r'0830.html'
# chrome打开本地HTML文件,需要加上file://协议头
filepath = 'file://{}'.format(filename)
print(filepath)
# 启用headless模式,此模式调用浏览器不会打开窗口
options = webdriver.chrome.options.Options()
options.headless = True
# 驱动chrome
driver = webdriver.Chrome(options=options)
# 打开本地HTML文件
driver.get(filepath)
# 提取xpath,这里xpath只需到具体的某个标签,不能是属性
# 通过 .text 获取标签文本内容
cgbianhao = driver.find_element_by_xpath('//*[@id="two_pages_all"]/div[1]/div[2]/table[3]/tbody/tr[{}]/td[3]'.format(i)).text
cgname = driver.find_element_by_xpath('//*[@id="two_pages_all"]/div[1]/div[2]/table[3]/tbody/tr[{}]/td[4]'.format(i)).text
cgstarttime = driver.find_element_by_xpath('//*[@id="two_pages_all"]/div[1]/div[2]/table[3]/tbody/tr[{}]/td[5]'.format(i)).text
cgstopstime = driver.find_element_by_xpath('//*[@id="two_pages_all"]/div[1]/div[2]/table[3]/tbody/tr[{}]/td[6]'.format(i)).text
# 通过 .get_attribute() 获取属性内容
url_item = driver.find_element_by_xpath('//*[@id="two_pages_all"]/div[1]/div[2]/table[3]/tbody/tr[{}]/td[7]/a'.format(i)).get_attribute("onclick")
# 关闭浏览器实例
driver.close()

参考

ChromeDriver
为什么这个xpath在python中使用lxml失败?