Python网络爬虫之解析库

Xpath,全称XML path language,即XML路径语言,它是一门在XML文档中查找信息的语言,但是它同样适用于HTML文档的搜索
XPath常用规则

表达式                     描述
nodename            选取此节点的所有子节点
/                   从当前节点选取直接子节点
//                  从当前节点选取子孙节点
.                   选取当前节点
..                  选取当前节点的父节点
@                   选取属性

实例引入

from lxml import etree          //导入lxml库的etree模块
html=etree.HTML('html文档')       //调用HTML类进行初始化
result=etree.tostring(html)     //调用tostring()方法将修正后HTML代码,类型是bytes类型
result=etree.xpath('xpath表达式')//可以使用xpath表达式可以将HTML文档过滤出你想要的HTML文档
result=etree.xpth('//li[@class="item-0"]/text()')   //使用Xpath中的text()方法可以获取节点中的文本
result=etree.xpth('//li/a/@href')   //使用@href可以获取节点a中的href属性的属性值
当一个节点中的属性有两个属性值的时候可以使用contains()方法
result=etree.xpath('//li/[contains(@class,"li")]/a/text()')//contains()方法,第一个参数传入属性名称,第二个参数传入属性值,只要此属性包含所传的属性值,就可以完成匹配
同时Xpath还支持运算符操作

Xpath提供了很多节点轴选择方法,
ancestor::*,获取所有的祖先节点
同时ancestor::,可以加限定条件,例如ancestor::div,表示只匹配div这个祖孙节点
attribute::,可以获取所有的属性值,同时也可以添加限定条件
child::,可以获取所有直接子节点,同时可以添加限定条件
descendant::,可以获取所有的子孙节点,同时可以添加限定条件
following::,可以获取当前节点之后的所有节点,同时可以添加限定条件
following-sibling::可以获取当前节点之后所有同级节点,可以添加限定条件。

Beautiful Soup的使用方法
Beautiful Soup就是一个Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据。
Beautiful Soup的基本用法:

form bs4 import BeautifulSoup       //导入bs4库中的BeautifulSoup
soup=BeautifulSoup('html文档',lxml)   //将html文档作为第一个参数传入Beautiful Soup对象中,该对象的第二个参数为解析器的类型(这里使用lxml),此时完成了BeautifulSoup对象的初始化,然后将该对象实例化为soup,然后就可以使用soup的各个方法和属性来解析这串HTML代码了。这里要注意的是如果你传入的HTML文档不完全,在初始化BeautifulSoup的时候可以将其自动补全
soup.prettify() //该方法可以把要解析的字符串以标准的缩进格式输出
soup.title//输出HTML中的title节点的文本内容,它的类型为bs4.element.Tag类型。
Tag具有一些属性,例如:
    soup.title.string:可以得到节点的文本内容
    soup.title.name:可以获取节点的名称
    soup.title.sttrs:可以获取节点所有的属性,返回的结果是字典类型
    soup.title.sttrs还有一种简写方式,soup.title['属性名']
    soup.title是Tag类型,他还可以继续调用它的子节点名字来获取他的子节点属性
    soup.title.contenes:获取title节点的直接子节点,返回的结果为列表类型
    soup.title.children:等同于contenes,但是返回的结果类型为生成器类型
    ,这时候可以使用for循环来输出相应的内容
    soup.title.descendants:可以获取所有的子孙节点,返回的类型也是生成器类型
    soup.title.parent:可以获取该节点的父节点
    soup.title.parents:可以获取该节点的祖先节点
    soup.title.next_sibling:获取节点的下一个兄弟元素
    soup.title.previous.sibling:获取节点的上一个兄弟元素
    soup.title.next_siblings:获取节点后面所有的兄弟节点
    soup.title.previous_siblings:获取节点前面所有的兄弟节点

同时Tag还有一些方法:例如:
find_all():给传入一些属性或文本,就可以查询所有符合条件的元素
除了find_all()方法,还是find()方法,不过后者返回是第一个匹配元素,而前者是返回所有匹配的元素组成的列表
除了这两个,还有其他查询方法:
find_parents()和find_parent():前者返回所有祖先节点,后者返回直接父节点
find_next_siblings()和find_previous_sibling():前者返回前面所有的兄弟节点,后者返回前面第一个兄弟节点。

pyquery
如果喜欢使用CSS选择器,推荐使用pyquery解析库

from pyquery import PyQuery
doc=PyQuery('html代码')   //这里的html代码可以传入字符串,也可以传入url,或本地文档
html=doc('css选择器')  //返回的类型为PyQuery类型
PyQuery类型有很多内置方法:
find()方法,find()会将符合条件的子孙节点返回,类型为PyQuery类型
children()方法,将符合条件的子节点返回,类型为PyQuery类型
parent()方法,直接返回目标节点的直接父节点,类型为PyQuery类型
parents(),直接返回目标节点祖先节点,类型为PyQuery类型
siblings(),直接返回目标节点的兄弟节点,类型为PyQuery类型
items(),将PyQuery类型变为生成器类型,然后可以使用for循环遍历每个节点
attr(),返回符合条件的属性值。如果有多个元素,调用attr()方法,只会得到第一个节点的属性
text(),获取节点内部的文本,如果有多个元素,则返回所有元素的文本内容,而不需要遍历
addClass(),添加节点的属性值
removeClass(),移除节点的属性值
其中attr()方法如果只传递一个参数的属性名,则是获取这个属性值;如果传递第二个参数,则可以修改属性值。text()html()方法如果不传参数,则获取节点内纯文本和HTML文本;如果传入参数,则赋值。
remove(),移除节点中的文本内容。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值