python | 爬虫笔记(四)- 解析库使用

本节内容为解析库的使用,内容涵盖:XPath、BeautifulSoup和PyQuery基础内容。 html

· 正则表达来提取比较繁琐。
· 对于网页的节点来讲,它能够定义 id、class 或其余的属性,并且节点之间还具备层次关系,在网页中能够经过 XPath 或 CSS 选择器来定位一个或多个节点,进而提取相关内容或属性。
· 解析库包括:LXML、BeautifulSoup、PyQuery

4.1 XPath

XPath,全称 XML Path Language,即 XML 路径语言,它是一门在XML文档中查找信息的语言。XPath 最初设计是用来搜寻XML文档的,可是它一样适用于 HTML 文档的搜索。
· 经常使用规则
//title[@lang=’eng’] #选择全部名称为 title,同时属性 lang 的值为 eng 的节点。

4.2 BeautifulSoup

借助网页的结构和属性等特性来解析网页的工具,能自动转换编码

1- 解析器 一般选择lxml

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello</p>', 'lxml') #对象初始化
print(soup.p.string) #调用方法解析 

2- 节点选择器

经过属性选择元素
通用格式:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.title.name)
print(soup.p.attrs) #获取属性
print(soup.p.attrs['name'])
print(soup.p.string) #获取内容
若是返回结果是单个节点,那么能够直接调用 string、attrs 等属性来得到其文本和属性,若是返回结果是多个节点的生成器,则能够转为列表后取出某个元素,而后再调用 string、attrs 等属性来获取其对应节点等文本和属性。

3- 方法选择器

经过调用find_all()、find() 等方法,而后传入相应等参数就能够灵活地进行查询了。

#find_all() API find_all(name , attrs , recursive , text , **kwargs)python

4- CSS选择器

select()方法
 
总结:
推荐使用 LXML 解析库,必要时使用 html.parser。
节点选择筛选功能弱可是速度快。
建议使用 find()、find_all() 查询匹配单个结果或者多个结果。
若是对 CSS 选择器熟悉的话能够使用 select() 选择法。

4.3 PyQuery(待补充)

 

##本系列内容为《python3爬虫开发实战》学习笔记。本系列博客列表以下:工具

(零)学习路线学习

(一)开发环境配置ui

(二)爬虫基础编码

(三)基本库使用spa

(四)解析库使用设计

(五)数据存储code

(六)Ajax数据爬取xml

(七)动态渲染页面爬取Selenium

持续更新...

对应代码请见:..