爬虫入门(四) ——xpath与lxml模块

 

1. xpath介绍

1.1 基本概念

1.2 结点的关系

2. 基本使⽤

2.1 ⼯具安装

2.2 基本用法

2.3 模块的使⽤


1. xpath介绍

1.1 基本概念

  • XPath(XML Path Language)是⼀种XML的查询语⾔,它能在XML树状结构中寻找节点。XPath ⽤于在 XML ⽂档中通过元素和属性进⾏导航
  • xml是⼀种标记语法的⽂本格式,xpath可以⽅便的定位xml中的元素和其中的属性值。lxml是python中的⼀个包,这个包中包含了将html⽂本转成xml对象、和对对象执⾏xpath的功能

1.2 结点的关系

xml_content = '''
<bookstore>   
<book>
<title lang='eng'>Harry Potter</title>   
<author>K.Rowing</author>   
<year>2005</year>
<price>29<price>
</book>
</bookstore>
'''
# <bookstore> 文档节点
# <author>J K.Rowing</author> 元素节点
# lang='eng' 属性节点
  • ⽗节点(Parent): book元素是title、author、year、price元素的⽗
  • ⼦节点(Children):零个一个或者多个,title、author、year、price都是book元素的⼦
  • 同胞节点(Sibling):拥有相同父的节点,title、author、year、price都是同胞

2. 基本使⽤

2.1 ⼯具安装

常用的节点选择工具:

  • chorme用XPath Helper
  • Firefox用XPath Checker

安装参考⽹站:(以chorme为例)

https://blog.csdn.net/qq_31082427/article/details/84987723

因为上面链接中的网盘地址失效,在下面重新给出XPath的下载地址,然后按照上面所给链接中的步骤安装

链接:https://pan.baidu.com/s/15xl8JHPn_9NkYQdp_KSQRA 
       提取码:g4gj 

浏览器右上角出现如图所示X图标代表安装成功

使用时可以在浏览器中用快捷键 ctrl+shift+x:

2.2 基本用法

查找某个特定的节点或者包含某个指定的值的节点:

http://www.budejie.com/网站为例爬取文案:

注意:text()表示将所得数据转换为二进制,这里不加/text()也可以得到同样的信息,但是如果我们在编译器中爬取则必须加text()

当然通过这种方法也可以爬取图片或者其他信息,上面给出的基本用法可以自己去尝试一下,这里就不再一一举例!

2.3 模块的使⽤

在Python中,我们安装lxml库来使⽤XPath 技术

  • lxml 是 ⼀个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML
  • 数据利⽤etree.HTML,将字符串转化为Element对象
  • lxml python 官⽅⽂档:http://lxml.de/index.html
  • 可使⽤ pip 安装:pip install lxml(若失败用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml)
  • lxml 可以⾃动修正 html 代码

话不多说,直接上代码理解:

from lxml import etree
wb_data = """
        <div>
            <ul>
                 <li class="item-0"><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>
             </ul>
         </div>
        """
# 将html/xml字符串转化为element对象
html_element = etree.HTML(wb_data)
# print(html_element) 
#运行结果为:<Element html at 0x21f3a8cffc8>,也就是转化为了16进制的数据

# element对象可以转换为字符串或者是二进制类型的数据
result = etree.tostring(html_element)
r = result.decode()
# print(type(r),r)
# 打印的结果是字符串数据,与第一种是相反的过程,运行结果不再列出可以自行尝试

# 获取li标签下面a标签的href
links = html_element.xpath('//li/a/@href')
# print(links)
#['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

# 获取li标签下a标签的内容
result = html_element.xpath('//li/a/text()')
# print(result)
#['first item', 'second item', 'third item', 'fourth item', 'fifth item']

# 把这些数据组合到一个字典当中,例如{'href':'link1.html','title':'first item'}
for link in links:
    d = {}
    d['href'] = link
    # 拿到下标索引值
    # print(links.index(link))
    d['title'] = result[links.index(link)]
    print(d)
    # {'href': 'link1.html', 'title': 60}
    # {'href': 'link2.html', 'title': 104}
    # {'href': 'link3.html', 'title': 116}
    # {'href': 'link4.html', 'title': 109}
    # {'href': 'link5.html', 'title': 108}








 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值