python解析网站BeautifulSoup

news/2024/7/19 11:41:18 标签: 正则表达式, 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_37">BeautifulSoup解析网站

BeautifulSoup可以从HTML或XML文件中提取数据

BeautifulSoup_40">BeautifulSoup的安装

在cmd中输入:pip install bs4

BeautifulSoup_43">BeautifulSoup的其他功能

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

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

1.遍历文档树

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

python">soup.header.h1

对于某个标签的所有子节点,我们可以用contents把它的子节点以列表的方式输出:

python">soup.header.div.contents

我们也可以使用children方法获得所有子标签:

python">for child in soup.header.div.children:
print (child)

上述方法只能获取该节点下一级的节点,如果要获得所有子子孙孙的节点,就要用.descendants方法。其代码如下:

python">for child in soup.header.div.descendants:
print(child)

除了获取子节点外,还可以使用.parent方法获得父节点的内容:

python">a_tag = soup.header.div.a
a_tag.parent

2.搜索文档树

在搜索文档树时,常用的是find()和find_all()
find()和find_all()方法可以和re正则结合起来使用

python">for tag in soup.find_all(re.compile("^h")):
print(tag.name)

输出:

python">html
header
h3

3.CSS选择器

CSS选择器方法既可以作为遍历文档树的方法数据提取,也可以作为搜索文档树的方法提取数据


http://www.niftyadmin.cn/n/891846.html

相关文章

99. 恢复二叉搜索树

链接 题目. 难度: high 解答&#xff1a; morris遍历就是利用左子树的最右节点指向当前的节点&#xff0c;这样就可以直接使用 rightMost.Right访问到下一个元素&#xff0c;这样就实现了遍历。morris遍历空间复杂度是O1&#xff0c;但是时间复杂度是N*logN&#xff0c;算…

115. 不同的子序列

链接 题目. 难度: high 解答&#xff1a; dp用熟了反而觉得简单了。s字符串增加一个字符&#xff0c;要么这个字符与t的最后一个字符相同&#xff0c;要么不相同 package mainimport "fmt"func numDistinct(s string, t string) int {if len(s) < len(t) {r…

iptables防火墙主机访问外网

示例 现在假设一台主机有如下规则&#xff1a; iptables -P INPUT DROP iptables -A INPUT -p tcp --dport 22 -j ACCEPT 分析 现在&#xff0c;其他主机ssh登陆到这台防火墙主机是没有问题到&#xff0c;问题是这台机器可以访问其他到网络吗&#xff1f;答案是不行。因为当…

120. 三角形最小路径和

链接 题目. 难度: middle 解答&#xff1a; 这道题其实是一个典型的dp问题&#xff0c;下一层的路径和最小值要依赖上一层的路径和最小值&#xff0c;既可以由上到下又可以由下至上。但是这里我们只需要依赖上一层的数据&#xff0c;所以空间复杂度可以优化为只需要一层的…

123. 买卖股票的最佳时机 III

链接 题目. 难度: high 解答&#xff1a; 这道题我们可以拆开来看&#xff0c;如果只允许买卖一次&#xff0c;那么很简单了&#xff0c;所以我们可以简化为另外一个问题&#xff0c;分别求出在[0:i]以及[i1:]这两个数组里分别买卖一次。 package mainimport "fmt&q…

124. 二叉树中的最大路径和

链接 题目. 难度: high 解答&#xff1a; 这道题可以分解为子问题&#xff1a;以root开始的路径最大路径和是多少&#xff0c;及较容易想到的是先计算每一个节点开始的最大路径和&#xff0c;那么就需要一个map来保存临时的结果。难的是想到直接在计算路径和的过程中就算出…

126. 单词接龙 II

链接 题目. 难度: high 解答&#xff1a; 这其实就是图的算法&#xff0c;Dijkstra算法 这道题&#xff0c;先求直达的最小路径&#xff0c;这个用bfs没啥好说的&#xff0c;一般求路径的问题就是要用dfs&#xff0c;可是不需要求所有的到达路径&#xff0c;也不需要求随意…

132. 分割回文串 II

链接 题目. 难度: high 解答&#xff1a; dp用来表示前n个字符串最小需要多少次cut。另外先计算好各个子字符串是否是回文.之前想到过一个dp[i][j]表示是s[i:j1]最少需要多少次切割。这个思路是对的&#xff0c;但是复杂度变为n**3了&#xff0c;没有利用到最后一次右边的…