python爬虫系统详解_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(),移除节点中的文本内容。

你可能感兴趣的:(python爬虫系统详解)