Python_爬虫系列_2.XPath
前言
全称 XML Path Language
,,,日后还要补充
一、XPath是什么?
最初是⽤来搜寻 XML ⽂档的,但同样适⽤于 HTML ⽂档的搜索。所以在做爬⾍时完全可以使⽤ XPath做相应的信息抽取。
二、学习
1.语法
代码如下(示例):
#字符串转化为etree._Element对象,然后具有Xpath方法
#from lxml import etree
#res = requests.get('https://www.baidu.com')
#res.encoding=res.apparent_encoding
#html = res.text
# doc = etree.HTML(html)
doc = etree.parse("tex.html")
print(doc.xpath("//title/text()"))
print(doc.xpath('//a[@id="link1"]/@title'))
# '''通过 属性 选取元素的属性值'''
print(doc.xpath('//input[@id="su"][@type="submit"]/@value'))
# '''通过 层级 定位元素'''
print(doc.xpath('//div[@id="u1"]/a/text()'))
#>>> ['新闻', 'hao123', '地图', '视频', '贴吧', '更多产品']
# '''xpath方法返回的结果是列表,可以通过列表 ‘索引’ 提取数据'''
link5 = doc.xpath('//div[@id="uu"]/p/a[last()-1]/text()')[0]
print(link5)
2.案例
import requests
from lxml import etree
url = 'http://www.cntour.cn/'
strhtml = requests.get(url) # get方式,获取网页数据
# 指定lxml解析器,将HTML文档转换成树形结构
#soup = BeautifulSoup(strhtml.text,'lxml')
html=etree.HTML(strhtml.text)
ul=html.xpath("//ul[@class='newsList']")[0]
#print(ul)
lis=ul.xpath("./li//a[@target='_blank']")
print(lis)
#news=[]
for li in lis:
print(li.xpath("@title"))
print(li.xpath("@title")[0])
title=li.xpath("@title")[0]
href=li.xpath("@href")[0]
new={"title":title,
"href":href
}
# soup匹配到的有多个数据,用for循环取出
# for item in data:
# result = {
# 'title': item.get_text(), # 标题
# 'link': item.get('href'), # 超链接
# #'ID': re.findall('\d+', item.get('href'))
# }
# print(result)
该处使用的url网络请求的数据。
总结
路漫漫何其远兮!!