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网络请求的数据。

总结

路漫漫何其远兮!!

posted @ 2021-09-28 21:19  cactus9  阅读(32)  评论(0编辑  收藏  举报