python爬虫匹配
1.匹配分类
我们在爬虫学习过程当中,大部分时候服务器返回给我们的是html,我们需要从HTML当中将数据过滤出来。所以我们需要学习字符串的匹配
1.1按照匹配内容进行描述
正则匹配:内容的类型和内容的长度匹配
1.2按照匹配结构进行描述
Xpath lxml:结构特征匹配
安装:pip install lxml
1.3综合性的匹配
Beautifulsoup:就是可以同时进行结构和内容的匹配
安装:pip install beautifulsoup4
2.正则匹配
正则是通过对字符串内容描述来进行匹配的高级字符串处理方式
简单的匹配结构:字符串的split、replace方法
2.1正则内容匹配
\d 数字
\D 非数字
\s 空格
\S 非空格
\w 数字、字母、下划线
\W 非数字、字母、下划线
[] 匹配当中任意一元素
[^] 匹配非当中任意一元素
| 匹配任意一边,a或b
() 组匹配
. 非换行
^ 开头
$ 结尾
2.2正则长度匹配
* 0到多次
+ 1到多次
? 0到1次
{} 指定次 {n,m}
2.3正则匹配方法
Findall
Search
Match
(1)代码
(2)结果
2.4组匹配
(1)代码
(2)结果
2.5贪婪和反贪婪
(1)代码
(2)结果
爬取百度图片提取图片地址可使用正则
(1)代码
(2)结果
3.lxml匹配
lxml 是python三方的结构匹配模块, lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
3.1 lxml匹配步骤
1.导入模块:
2.lxml在爬虫匹配当中具有相当固定的套路
(1)将爬虫获取到的HTML字符串转换为HTML结构图
(2)xpath匹配获取数据
3.2 lxml匹配结果处理
text 返回匹配标签的文本
tag 返回匹配标签的名字
attrib 返回匹配标签的属性
(1)代码
# coding:utf-8
import requests
from lxml import etree
html = \’\’\’
<div>
<ul>
<li name=”suner” class=”one”>suner</li>
<li name=”wjk” class=”two”>wjk</li>
<li name=”wang” class=”three”>wang</li>
<li name=”karry” class=”four”>karry</li>
</ul>
</div>
\’\’\’
# lxml在爬虫匹配当中具有相当固定的套路
# 1.将爬虫获取到的HTML字符串转换为HTML结构图
HTML = etree.HTML(html)
# 2.xpath匹配获取数据
results = HTML.xpath(“//li”)
for result in results:
print(“==============================”)
print(result)
print(result.text)
print(result.tag)
print(result.attrib)
(2)结果
3.3 lxml常用语法
3.3.1 //
// :递归层整个HTML里面所有的
3.3.2 /
/ :代表HTML结构的下一层,一定是直属的下一层,必须一层一层写,比较繁琐,但是是程序生成xpath的首选,我们在浏览器的调试模式下可以复制到类似的xpath
浏览器拷贝的xpath://*[@id=”qiushi_tag_121089034″]/div[2]/a/img
3.3.3 索引
[]索引(从1开始)主要用于短期快速匹配
# 匹配li标签的第四个索引
result = HTML.xpath(\’//div/ul/li[4]\’)
3.3.4 @属性
[@]属性
上述匹配方式,如果页面加载慢,或者异步加载,或者开发者添加了一个li那匹配就失效了那么我们用属性精确匹配,我们在爬虫当中首选
result = HTML.xpath(\’//li[@name=”suner“]\’) 匹配name=suner的值
result = HTML.xpath(\’//li/@name\’) 匹配所有name属性的值
4.beautifulsoup匹配
1.BeautifulSoup是Python的一个库,最主要的功能就是从网页匹配我们需要的数据。
2.BeautifulSoup将html解析为对象进行处理,全部页面转变为字典或者数组,相对于正则表达式的方式,可以大大简化处理过程。
3.安装:pip3 install beautifulsoup4
Beautifulsoup和xpath的使用结构大同小异
4.1 beautifulsoup匹配步骤
1.导入模块:
from bs4 import BeautifulSoup
4.1.1 构建beautifulsoup实例
html = \’\’\’
<html>
<head>
<title>test</title>
</head>
<body>
<div>
<ul>
<li name=”suner” class=”one”><a>suner</a></li>
<li name=”wjk” class=”two”>wjk</li>
<li name=”wang” class=”three”>wang</li>
<li name=”karry” class=”four”>karry</li>
</ul>
</div>
</body>
</html>
\’\’\’
soup = BeautifulSoup(html,”lxml”)
(1)第一个参数是要匹配的内容
(2)第二个参数是beautifulsoup要采用的模块
# html.parser Python内置的结构匹配方法,但是效率不如lxml所以不常用
# lxml 使用 lxml模块
# xml 使用 xml模块
# html5lib 该模块可以将内容转换HTML5对象
# 但是我们要想用以上功能就要具备对应模块,比如你用lxml就要安装lxml
4.1.2 查找元素的值
在bs4当中有n多种匹配方法,但是最常用的是两种
4.1.2.1 find 查找一次
1.find查找
(1)代码
(2)结果
2.通过属性值查找
(1)代码
(2)结果
3.select查找
(1)代码
(2)结果
4.1.2.2 findall 查找所有
(1)代码
(2)结果
4.1.2.3 soup本身返回
(1)代码
(2)结果