朗读

python3爬虫学习(5)

文章目录[x]
  1. 1:下面主要说一下lxml库的使用
  2. 1.1:运行结果
  3. 1.2:看一下结果

XPATH和LXML类库

这一篇文章小生记录一下xpath和lxml类库的学习


  • 先来看一下什么是XML

  • 几种标记语言的区别

  • xpath定义

xpath helper是谷歌的一个插件,下面是它的工作界面

其中左框是写xpath语法的,右框显示结果

  • 至于节点选取语法和路径表达,谓语之类的可以在网上找到很多,这里只贴2个图

下面主要说一下lxml库的使用


lxml python 官方文档:http://lxml.de/index.html

这个库是属于第三方库,需要提前安装,并且使用时可能不会提示,不要就认为库没安装正确或者导入失败。

为了避免安装失败可以用-i参数设置软件安装源。(这里用的是清华的)

sudo pip3 install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/

下面直接看一个例子

 

# coding=utf-8

from lxml import etree

text = text = ''' <div> <ul>
<li class="item-1"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li>
闭合标签 </ul> </div> '''

html = etree.HTML(text)

print(html)

# print(etree.tostring(html).decode())
ret1 = html.xpath("//li[@class='item-1']/a/@href") #获取itme-1对应的url
print(ret1)
ret2 = html.xpath("//li[@class='item-1']/a/text()") #获取itme-1对应的文本
print(ret2)

# 遍历,将url和标题对应存入字典item
for href in ret1:
item ={}
item["href"]= href
item["title"] = ret2[ret1.index(href)]
print(item)

 

运行结果

这里个时候有个问题就是,加入第一个标签中是没有href的话,遍历对应时就会乱,不能一一对应

<li class="item-1"><a>first item</a></li>

这个时候这种遍历结果就不能满足我们的需求,所以我们要换一种遍历模式

 

text = text = ''' <div> <ul>
<li class="item-1"><a">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li>
闭合标签 </ul> </div> '''

html = etree.HTML(text)

print(html)

# print(etree.tostring(html).decode())
ret1 = html.xpath("//li[@class='item-1']/a/@href") #获取itme-1对应的url
print(ret1)
ret2 = html.xpath("//li[@class='item-1']/a/text()") #获取itme-1对应的文本
print(ret2)

print("*"*100)

ret4 = html.xpath("//li[@class='item-1']")

for i in ret4:
item = {}
item["title"] = i.xpath("./a/text()")[0] if len(i.xpath("./a/text()"))>0 else None
item["href"] = i.xpath("./a/@href")[0] if len(i.xpath("./a/@href"))>0 else None
print(item)

 

看一下结果

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00