Python网络爬虫-网页分析

Ptyhon Web爬网程序(第5部分)-解析正则表达式BeautifulSoupLxml的网页

用于字符串操作的正则表达式-逻辑公式

1:简介

使用预定义的特定字符以及这些特定字符的组合来形成常规字符串,以表示该字符串的过滤逻辑。这就像人工智能中的谓词逻辑:小明喜欢猫,小明也喜欢金鱼。小明有一个匹配猫和金鱼的过程。

从网页提取数据时河北快3 ,首先将源代码转换为字符串,然后使用正则表达式匹配所需的数据。

常用常规字符及其含义如下

模式

说明

模式

说明

匹配任何字符

\ s

匹配空白字符

*

匹配上一个字符0次或更多次

\ S

匹配任何非空白字符

+

匹配上一个字符一次或多次

\ d

比赛号码,等于[0-9]

匹配上一个字符0或1次

\ D

匹配任何非数字,等于[^ 0-9]

^

匹配字符串的开头

\ w

匹配字母数字,等效于[A-Z,a-z,0-9]

$

匹配字符串的结尾

\ W

匹配非字母数字,等效于[^ A-Z,a-z,0-9]

匹配括号中的表达式,这也意味着一个组

[]

用于表示一组字符

2:Python正则表达式的三种方法

re.match:从字符串的开头匹配一个模式,如果不能从开头匹配快乐飞艇 ,则match()不返回任何内容。

语法:re.match(模式,字符串,标志=0)

pattern是包含某些特殊字符的正则表达式

string是要匹配的字符串

flags用于控制正则表达式的匹配方法:是否区分大小写,多行匹配等。

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

匹配具有特定模式的字符串:

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

r“(。*)is(。*!)”的r代表原始字符串。不会对引号中的反斜杠“ \”进行特殊处理。

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

两个反斜杠“字符串转义”将“ \\”转义为“ \”。

使用原始字符串方法r'……”不会对引号中的反斜杠“ \”执行特殊处理。

转义正则表达式:

网络爬虫 正则表达式

网络爬虫 正则表达式

r'5 \ 9'中需要匹配的字符“ \”在以编程语言表示的正则表达式中需要4个反斜杠“ \\\\”:前两个反斜杠“ \\”“以及后两个字符串中的每个反斜杠“ \\”都转义为一个反斜杠“ \”,并且将两个反斜杠“ \\\\”转义为两个反斜杠“ \\”,最后将这两个反斜杠“ \\”转义为一个反斜杠正则表达式中的“ \”

使用r'...'方法后,无需执行字符转义网络爬虫 正则表达式,直接转到常规转义“”中的第二步“常规转义”

正则表达式可以进行“字符串转义”和“正则转义”

如果不使用r'...'方法,则需要执行“字符串转义”和“常规转义”

re.search:扫描整个字符串并返回第一个成功匹配项

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

re.match只能从字符串的开头进行匹配鸭脖娱乐官网 ,“。com”位于字符串的末尾,因此无法进行匹配。

在其他方面,re.search与re.match相同,您可以参考上述re.match进行操作。

re.findall:可以找到所有匹配的结果,如下所示:

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

模式:“ [0-9] +”:任意长度的数字

重新匹配

从字符串的开头匹配一个模式。如果它不能从头开始匹配,则match()将不返回任何内容。

re.search

扫描整个字符串并返回第一个成功匹配项

Re.findall

找到所有匹配的结果

例如:抓取百度热门列表

网络爬虫 正则表达式

网络爬虫 正则表达式

import requests
import  re
link='https://www.baidu.com/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/87.0.4280.88 Safari'
                      '/537.36 Edg/87.0.664.66','Host':'www.baidu.com'}
r=requests.get(url=link,headers=headers)
print(r.status_code)
html=r.text
title_list=re.findall('(.*?)',html)
print(title_list)

网络爬虫 正则表达式

网络爬虫 正则表达式

上面的代码用于使用findall匹配并使用'(。*?)'正则表达式表示满足此条件的所有结果来提取百度热门列表条目。意味着仅提取(。*?)部分。

使用BeautifulSoup解析网页

BeautifulSoup可以从HTML或XML文件提取数据。可以提供一些简单的Python样式的函数来处理导航搜索,修改分析树等。

解析器

使用方法

优势

缺点

Python标准库

BeautifulSoup(标记,'html.parser')

Python的内置标准库;执行速度适中;强大的文档容错能力

速度慢

LxmlHtml解析器

BeautifulSoup(标记yobo官网 ,“ lxml”)

速度快网络爬虫 正则表达式,文档容错能力强

没有

lxmlXML解析器

BeautifulSoup(标记,['lxml','xml'])

最快的速度,唯一支持XML的解析器

没有

html5lib

BeautifulSoup(标记为“ html5li”)

最好的容错能力是在浏览器中解析文档以生成HTML5格式的文档

慢速不依赖于外部扩展

例如:抓取百度热门列表

import requests
from bs4 import BeautifulSoup
link='https://www.baidu.com/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/87.0.4280.88 '
                      'Safari/537.36 Edg/87.0.664.66'}
r=requests.get(url=link,headers=headers)
soup=BeautifulSoup(r.text,'lxml')
title_list=soup.find_all('span',class_='title-content-title')
i=1
for i in range(len(title_list)):
    title=title_list[i].text
    print(i+1,':',title)

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

网络爬虫 正则表达式

BeautifulSoup对象是一个复杂的树结构。它的每个节点都是一个Python对象。获取网页的内容是提取对象内容的过程。

提取对象的方法:

1:遍历文档树:像爬树一样:树干-小树干-分支

2:搜索文档树:搜索文档树时,最常用的是find()和find_all()。在第1章中提到

3:CSS选择器:它可以用作遍历文档树以提取数据的方法,也可以用作搜索文档树以提取数据的方法。

使用lxml解析网页

Lxml使用C语言编写,解析速度比不使用lxml的BeautifulSoup快一些。和BeautifulSoup相比,lxml还多了一种Xpath选择器的方法。Xpath是一门在XML文档中查找信息的语言,通过使用路径表达式来选取XML文档中的节点或节点集,也可以用在HTML获取数据中。
import requests
from lxml import etree
link='https://www.baidu.com/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/87.0.4280.88 '
                      'Safari/537.36 Edg/87.0.664.66'}
r=requests.get(url=link,headers=headers)
html=etree.HTML(r.text)
title_list=html.xpath('//span[@class="title-content-title"]/text()')
print(title_list)

运行结果:

这个例子也是百度的热点

其中“ // span”表示选择所有子元素,“ //”无论在文档中的何处,都添加[@ class =“ title-content-title”]来表示“标题”- “内容标题”元素,/ text()表示提取元素中的所有文本。

Xpath-select的选择方法,如下表所示:

表达

说明

节点名

选择该节点的所有子节点

/

从根节点中选择

选择当前节点

..

选择当前节点的父节点

//

从当前节点中选择与选择匹配的节点,而不管它们的位置

@

选择属性

在上面的示例中,“ // span”:选择所有span元素,无论它们在文档中的什么位置

HTML解析器

性能

易于使用

如何提取数据

正则表达式

快速

更困难

正则表达式

BeautifulSoup

快速(对于lxml解析)

简单

Find()放置方法,CSS选择器

lxml

快速

简单

Xpath,CSS选择器

跟随我,获得更多小技能!

/ r / ZRM9JZXEz8iwrdFG90Z3(QR码的自动识别)

老王
地址:深圳市福田区国际电子商务产业园科技楼603-604
电话:0755-83586660、0755-83583158 传真:0755-81780330
邮箱:info@qbt8.com
地址:深圳市福田区国际电子商务产业园科技楼603-604
电话:0755-83174789 传真:0755-83170936
邮箱:info@qbt8.com
地址:天河区棠安路288号天盈建博汇创意园2楼2082
电话:020-82071951、020-82070761 传真:020-82071976
邮箱:info@qbt8.com
地址:重庆南岸区上海城嘉德中心二号1001
电话:023-62625616、023-62625617 传真:023-62625618
邮箱:info@qbt8.com
地址:贵阳市金阳新区国家高新技术开发区国家数字内容产业园5楼A区508
电话:0851-84114330、0851-84114080 传真:0851-84113779
邮箱:info@qbt8.com