作者:建霖怡旭家其 | 来源:互联网 | 2023-10-13 00:29
篇首语:本文由编程笔记#小编为大家整理,主要介绍了python解析网站BeautifulSoup相关的知识,希望对你有一定的参考价值。首先了解一下正则表达式解析
篇首语:本文由编程笔记#小编为大家整理,主要介绍了python解析网站BeautifulSoup相关的知识,希望对你有一定的参考价值。
首先了解一下正则表达式解析网站
正则表达式是解析网站时必须要了解的,我们在提取网页中的数据时,可以先将源代码变成字符串,然后用正则表达式匹配想要的数据
模式 | 描述 |
---|
. | 匹配任意字符,除了换行符 |
* | 匹配前一个字符0次或多次 |
+ | 匹配前一个字符1次或多次 |
? | 匹配前一个字符0次或1次 |
^ | 匹配字符串开头 |
$ | 匹配字符串末尾 |
() | 匹配括号内的表达式,也表示一个组 |
\\s | 匹配空白字符 |
\\S | 匹配任何非空白字符 |
\\d | 匹配数字,等价于[0-9] |
\\D | 匹配任何非数字,等价于[^0-9] |
\\w | 匹配字母数字,等价于[A-Za-z0-9_] |
\\W | 匹配非字母数字,等价于[^A-Za-z0-9_] |
[] | 用来表示一组字符 |
re.match()方法
re.match的意思是从字符串起始位置匹配一个模式,如果从起始位置匹配不了,match()就返回none
re.match的语法为re.match(pattern,string,flags=0),其中pattern是正则表达式,包含一些特殊的字符,string为要匹配的字符串,flags用来控制正则表达式的匹配方式,如是否区分大小写、多行匹配等
re.search方法
re.search扫描整个字符串并返回第一个成功的匹配,其余与re.match一样
re.findall方法
由于re.match和re.search方法中,我们只能找到一个匹配所写的模式,而findall可以找到所有的匹配
findall与match、search不同的是,findall能够找到所有匹配的结果,并且以列表的形式返回
BeautifulSoup解析网站
BeautifulSoup可以从HTML或XML文件中提取数据
BeautifulSoup的安装
在cmd中输入:pip install bs4
BeautifulSoup的其他功能
BeautifulSoup对象是一个复杂的树形结构,它的每个节点都是python对象,获取网页的内容就是一个提取对象内容的过程
- 遍历文档树
- 搜索文档树
- CSS选择器
1.遍历文档树
要获取
标签,只需要输入:
soup.header.h1
对于某个标签的所有子节点,我们可以用contents把它的子节点以列表的方式输出:
soup.header.div.contents
我们也可以使用children方法获得所有子标签:
for child in soup.header.div.children:
print (child)
上述方法只能获取该节点下一级的节点,如果要获得所有子子孙孙的节点,就要用.descendants方法。其代码如下:
for child in soup.header.div.descendants:
print(child)
除了获取子节点外,还可以使用.parent方法获得父节点的内容:
a_tag = soup.header.div.a
a_tag.parent
2.搜索文档树
在搜索文档树时,常用的是find()和find_all()
find()和find_all()方法可以和re正则结合起来使用
for tag in soup.find_all(re.compile("^h")):
print(tag.name)
输出:
html
header
h3
3.CSS选择器
CSS选择器方法既可以作为遍历文档树的方法数据提取,也可以作为搜索文档树的方法提取数据