- 环境安装:pip install lxml
- xpath解析的编码流程
- 创建一个etree类型的对象,然后把即将被解析的页面源码数据加载到该对象中
- 调用etree对象的xpath方法结合着不同形式的xpath表达式,进行标签定位和数据提取
- xpath表达式如何理解?
- html中的标签是遵从树状结构的。
- xpath表达式中不可以出现tbody标签,如果有直接将其删除跨过即可!
-
from lxml import etree fp=open('test.html','r') tree=etree.parse(fp) #xpath返回的一定是列表,列表中存储的是定位到的标签对象 title_tag=tree.xpath('/html/head/title') title_tag=tree.xpath('html//title') title_tag=tree.xpath('//head/title') title_tag=tree.xpath('//title') #最左侧为/:表示必须从树的根标签(html标签)开始进行定位 #最左侧为//:可以从任意位置进行标签的相对位置定位 #非最左侧的/:表示一个层级 #非最左侧的//:表示多个层级 tag=tree.xpath("//div")#定位所有的div标签 #属性定位 tag=tree.xpath('//div[@class="song"]')#定位class属性值为song的div标签 #索引定位:索引是从1开始的 tag= tree.xpath('//div[@class="tang"]/ul/li[3]')#定位到第三个li标签 #获取定位到标签中的文本内容 tag=tree.xpath('//div[@class="song"]/p[3]/text()') #获取定位到标签中的属性值://tag/@attrName tag=tree.xpath('//img/@src') print(tag)
-
案例获取热门城市和全部城市的名称:
-
from lxml import etree import requests headers={ 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36' } url='https://www.aqistudy.cn/historydata/' page_text=requests.get(url=url,headers=headers,verify=False).text tree=etree.HTML(page_text) #解析热门城市 hot_li_list=tree.xpath('//div[@class="bottom"]/ul/li') for li in hot_li_list: city_name=li.xpath('./a/text()')[0] print(city_name) #解析全部城市 all_li_list=tree.xpath('//div[@class="bottom"]/ul/div[2]/li') for li in all_li_list: city_name=li.xpath('./a/text()')[0] print(city_name)
测试中,使用xpath对返回的数据进行数据解析
最新推荐文章于 2024-07-12 16:16:27 发布