欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Python爬虫学习第二弹 —— Beautiful Soup页面解析

Python爬虫学习第二弹 —— Beautiful Soup页面解析

2025/1/24 13:10:20 来源:https://blog.csdn.net/sikimayi/article/details/144606177  浏览:    关键词:Python爬虫学习第二弹 —— Beautiful Soup页面解析

早上好啊,大佬们。今天我们来讲讲爬虫中最重要的一部分——页面解析。

在之前我们向页面发起了请求,然后从中获取了一个内容,然后如果想要获取一批类似的内容该怎么做呢?

按照之前的方式,将每一个都单拎出来获取,这显然是不太现实。
那么我们就应该想想其它更好的方式,我们也提到了,想要获取的数据是一些类似的内容,那么对于它们的URL或者,内容的存储位置是否类似。

基于这个思路,我们就需要对页面进行解析,那么开干!!
哦哦哦哦哦!

页面解析

我们就来看看CSDN的主页吧~
CSDN主页
右键,检查。然后点左上角的对应元素查找
检查
然后在页面中选择你所需要的内容,例如说,我想要获取页面中的url跳转链接。
查找内容
然后,我们发现每一个内容的存储格式都是一样的,然后再内层的跳转链接的存储格式也是一样的。
在这里插入图片描述
在这里插入图片描述
到这里,我们就得出了一个结论,对于CSDN中的每一个跳转链接的存储格式都是一样的
不知道大家有没有对于一个页面进行过搜索。例如说,我们在CSDN的主页中按

Ctrl + F

在这里插入图片描述搜索框中输入 学习 然后我们它会返回搜索结果,例如说,我现在搜出来3个。

通过这个进行引申,我们也同样可以在检查中进行搜索,然后假如说我们能够获取搜索结果,是不是就能够获取到我们所需要的内容。

Beautiful Soup

OK,针对上面的思路,再Python中的导入库中还真有这么个东西,而且还不少。

Beautiful Soup
XPath
正则表达式
诸如此类

那么我们今天这一期也不多讲,就先讲讲 —— Beautiful Soup

Bs4包安装

Win + R 输入 cmd 打开终端

然后输入下面这行代码

pip install bs4 lxml

因为我这边已经安装好了,所以显示是这样的。
在这里插入图片描述

语法规则

首先来讲讲它的语法规则。

【.】来索引 class
【#】来索引 id
【空格】 切换到下一层索引
索引规则是,从外到内,层层深入

实战 —— CSDN跳转链接获取

在检查中按 Ctrl + F 打开搜索框。

然后点对应对象,指向包含所有内容的部分,一般都是在内容的上一层,也就是图中页面里蓝色框。

就按照这样,一层层往里面深入。

在这里插入图片描述
在每一个class或者id 的内容中不能出现 空格。
这是我最后写出来的 Beautiful Soup 表达式 ——

div.Community div.active div.content a

由于中间一些大层中的索引对结果没有影响,所以我就没有加上。
在这里插入图片描述
但是对于我写的这个表达式并不十分完美,大家可以看一下下面,在同索引下,有不是我们所需要的内容。
但是,小白兔不会了,只能写到这里了,好在它是有规律的,它多了一倍,每一个都是作者的主页链接,然后两者是交相出现的,所以我们可以在代码中处理掉。

div.Community div.active div.content a

对于这个,希望大佬能帮小白兔优化一下表达式。

在这里插入图片描述

到这里,我们就完成了Beautiful Soup表达式,下面我们就开始爬取这个网页吧。

程序代码

首先是对页面请求响应。

import requests
from bs4 import BeautifulSoupurl = 'https://www.csdn.net/?spm=1011.2266.3001.4476'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
} #CSDN的网页只检查这个,所以加上这个就可以了html = requests.get(url,headers=headers)

后面我们就需要对页面进行解析

import requests
from bs4 import BeautifulSoupurl = 'https://www.csdn.net/?spm=1011.2266.3001.4476'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
} #CSDN的网页只检查这个,所以加上这个就可以了html = requests.get(url,headers=headers)
#这里我们就把网页爬取下来了。
#下面我们就需要用Bs4表达式来解析页面了。
soup = BeautifulSoup(html.text, 'lxml') #这里是解析页面urls = soup.select('div.Community div.active div.content a') #这里是在页面内容中搜索我们所需要的,也就是之前写的那个Bs4表达式
#print(urls)
#里面的内容对于每一个大内容是通过列表存储的,然后对于每个我们所需的内容是用字典存储的。for i in range(len(urls) // 2): #前面分析的时候,我们发现所获取的内容还有作者的主页链接,需要把它跳过print(urls[2*i].get('href')) #观察字典内容,我们可以发现存储url的key是href

然后我们就把我们所需的链接爬取下来了。
在这里插入图片描述

大家可以再试试把它们的标题内容爬取下来。
OK,大家先试试看,下面会提供解答。

CSDN标题获取

Bs4表达式

Bs4:div.Community div.active div.content p.Community-h-tag span.blog-text

Python代码

import requests
from bs4 import BeautifulSoupurl = 'https://www.csdn.net/?spm=1011.2266.3001.4476'
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
} #CSDN的网页只检查这个,所以加上这个就可以了html = requests.get(url,headers=headers)
#这里我们就把网页爬取下来了。
#下面我们就需要用Bs4表达式来解析页面了。
soup = BeautifulSoup(html.text, 'lxml') #这里是解析页面urls = soup.select('div.Community div.active div.content a') #这里是在页面内容中搜索我们所需要的,也就是之前写的那个Bs4表达式
#print(urls)
#里面的内容对于每一个大内容是通过列表存储的,然后对于每个我们所需的内容是用字典存储的。
titles = soup.select('div.Community div.active div.content p.Community-h-tag span.blog-text')for i in range(len(titles)):print(urls[2*i].get('href')) #观察字典内容,我们可以发现存储url的key是hrefprint(titles[i].text)

效果

在这里插入图片描述

注意点

我们下面来讲一下,获取标题时候遇到的一些容易错的地方。
首先是写Bs4表达式的时候,如果大家的表达式是这样的话

div.Community div.active div.content p.Community-h-tag span

你就会发现你所获取到的内容偏多了。因为在页面中的这个100.0元也是能通过这样搜索到的。
在这里插入图片描述
所以我们要更精细一点 ——

div.Community div.active div.content p.Community-h-tag span.blog-text

然后对于输出时,记住 titles 比 urls 少。

尾声

那么这一期的内容就这么多,相信大家很快就能掌握了。
然后,所有的学习都离不开一个东西 —— 练习
所以,在这里,小白兔在这里给大家一个题目,可以回去尝试一下。
在百·度进行搜索,然后只获取 跳转链接urls标题titles,大家可以把自己的结果分享在评论区,在评论区进行交流,大家一起互相交流学习。
那么 Bye~ Bye~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com