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)结果

 

 

猜你喜欢

转载自blog.csdn.net/qq_39620483/article/details/83039752