xpath解析网页,需要先将请求返回的网页数据进行处理,这一步需要用到lxml库的etree方法
import requests
from lxml import etree
r = requests.get('https://nba.hupu.com/')
html = etree.HTML(r.text)
result = html.xpath('//dl[@class="nba-news-list"]//a/text()')
xpath获取有绝对路径获取(一层一层往下找,必须编写完整),相对路径获取(全局搜索)
/ 代表绝对路径
// 代表相对路径
绝对路径: /html/body/div[4]/div[1]/div[1]/div[2]/dl/dd[1]/a[1],看着就怕,谷歌浏览器自带获取xpath路径
在网页中点击鼠标右键-检查-选取页面元素-右键选中的标签-Copy-Copy XPath
相对路径 //dl[@class="nba-news-list"]//a/@href
获取属性 a/@href
获取文本 a/text()
其他用法
- 以xxxclass xxxid开头对应的节点
- //dl[starts-with(@class, "xxxclass")]//a/@href
- //dl[starts-with(@id, "xxxid")]//a/@href
- 包含 xxx 文本/id/class/... 对应的节点
- //a[contains(text(), "xxx")]/@href
- //a[contains(@class, "xxx")]/@href
- //a[contains(@name, "xxx")]/@href
遍历获取的节点列表
html = etree.HTML(html)
result= html.xpath('//li')
for i in html_data:
print(i.xpath('./a/text()')[0])
. 代表当前节点
.. 代表当前节点的父节点
webdriver遍历执行点击事件(举例)
for i in range(10):
express = '//div[@class="selectric-scroll"]//li[' + str(i+1) + ']'
so.driver.find_element_by_xpath(express).click()
time.sleep(1)