python解析网站BeautifulSoup

Posted FANCY PANDA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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对象,获取网页的内容就是一个提取对象内容的过程

  1. 遍历文档树
  2. 搜索文档树
  3. CSS选择器

1.遍历文档树

要获取< h1 > 标签,只需要输入:

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选择器方法既可以作为遍历文档树的方法数据提取,也可以作为搜索文档树的方法提取数据

以上是关于python解析网站BeautifulSoup的主要内容,如果未能解决你的问题,请参考以下文章

python解析网站BeautifulSoup

如何在 python 中使用 Selenium 和 Beautifulsoup 解析网站? [关闭]

Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据

python BeautifulSoup,bs4下载网站和解析HTML

使用Python中的BeautifulSoup解析多个项目

如何在python中忽略BeautifulSoup解析器中的换行符