七、使用BeautifulSoup4解析HTML实战(一)

简介: 七、使用BeautifulSoup4解析HTML实战(一)

🍀分析网站

本节我们的目标网站是新浪微博的热搜榜,我们的目标是获取热榜的名称热度值

首先通过检查,查看一些标签

不难看出,我们想要的数据是包含在class="td-02"的td标签中

热搜内容在td标签下的a标签

热度位于td标签下的span标签


🍀爬取前的准备

首先导入需要的库

# 导入模块
import requests
from bs4 import BeautifulSoup

之后定义url和请求头,在请求头这里,寻常的网站或许只需要User-Agent,这里还需要一个Cookie

在这里插入代码片# 定义url和请求头
url =  'https://s.weibo.com/top/summary?display=0&retcode=6102'
_headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
                "Cookie": "SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WW2kX-Z46lRbEGNeGGOqQzg; SINAGLOBAL=1879006065688.1335.1674544342950; UOR=,,www.baidu.com; SUB=_2AkMUum_nf8NxqwJRmP8cy2rkbYh1zQ_EieKi5p48JRMxHRl-yT9vqmEptRB6PzpBCFr8Nw9WHg85yXpbEGjv_BB4-91Q; _s_tentry=weibo.com; Apache=5265586173710.342.1689125693519; ULV=1689125693521:3:1:1:5265586173710.342.1689125693519:1675905464675"
            }

之后进行发送请求和实例化对象

# 发送请求
response = requests.get(url,headers=_headers)
content = response.content.decode('utf8')
# 实例化对象
soup = BeautifulSoup(content, 'lxml')

这里我们使用的是lxml HTML解析器,市面上90%的网站都可以用它解析,但是还是有一些漏网之鱼,下面表格中介绍了一些其他的解析器

解析器 使用方法 优势 劣势
Python标准库 soup = BeautifulSoup(‘html’,‘html.parser’) 速度适中 在Python老版本中文容错力差
lxml HTML解析器 soup = BeautifulSoup(‘html’,‘lxml’) 速度快 需要安装C语言库
lxml XML解析器 soup = BeautifulSoup(‘html’,‘xml’) 速度快 需要安装C语言库
html5lib soup = BeautifulSoup(‘html’,‘html5lib’) 以浏览器的方式解析文档 速度慢

介绍完这几种解析器后,我们接下来要做的就是使用bs4来进行获取数据,细心的小伙伴可以用Xpath进行对比一下


🍀获取数据

获取数据的步骤比较简单,根据先前的分析,我们使用find_all进行获取即可,这里注意我们需要使用列表切一下,因为我们想要获取的热榜是从第二个开始的

接下来定义一个列表,使用一个for循环,将想要提取的数据依次提取即可,最后保存到定义好的列表中

# 提取数据
tds = soup.find_all('td',class_="td-02")[1:]
weibos = []
for td in tds:
    # 内容
    event = td.find_all('a')[0].string  # 只把对象里面的内容提取出来
    # 热度
    hot = td.find_all('span')[0].string
    weibo = {
        "event": event,
        "hot": hot
    }
    weibos.append(weibo)
print(weibos)

🍀完整代码

# 导入模块
import requests
from bs4 import BeautifulSoup
# 定义url和请求头
url =  'https://s.weibo.com/top/summary?display=0&retcode=6102'
_headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
                "Cookie": "SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WW2kX-Z46lRbEGNeGGOqQzg; SINAGLOBAL=1879006065688.1335.1674544342950; UOR=,,www.baidu.com; SUB=_2AkMUum_nf8NxqwJRmP8cy2rkbYh1zQ_EieKi5p48JRMxHRl-yT9vqmEptRB6PzpBCFr8Nw9WHg85yXpbEGjv_BB4-91Q; _s_tentry=weibo.com; Apache=5265586173710.342.1689125693519; ULV=1689125693521:3:1:1:5265586173710.342.1689125693519:1675905464675"
            }
# 发送请求
response = requests.get(url,headers=_headers)
content = response.content.decode('utf8')
# 实例化对象
soup = BeautifulSoup(content, 'lxml')
# 提取数据
tds = soup.find_all('td',class_="td-02")[1:]
weibos = []
for td in tds:
    # 内容
    event = td.find_all('a')[0].string  # 只把对象里面的内容提取出来
    # 热度
    hot = td.find_all('span')[0].string
    weibo = {
        "event": event,
        "hot": hot
    }
    weibos.append(weibo)
print(weibos)

🍀find_all()介绍

完成了这次的实战可能有的人对这个方法还是有些不太了解,接下来,针对此方法,我来详细介绍一下

在BeautifulSoup库(通常作为bs4导入)中,find_all是一个常用的方法,用于在HTML或XML文档中查找符合特定条件的所有元素。

find_all的基本语法是:

find_all(name, attrs, recursive, string, limit, **kwargs)

其中,参数的含义如下:

  • name:要查找的元素标签名称或标签列表。可以使用字符串、正则表达式或函数来匹配标签名。
  • attrs:要查找的元素的属性值(可选)。可以使用字典或关键字参数来指定多个属性和对应的值。
  • recursive:指定是否递归查找子孙节点,默认为 True。
  • string:用于查找具有指定文本内容的元素(可选)。
  • limit:限制返回的结果数量的最大值(可选)。

下面是一些使用find_all的示例:

  1. 查找特定标签的所有元素:
soup.find_all("a")   # 查找所有 <a> 标签的元素
soup.find_all(["a", "img"])   # 查找所有 <a> 和 <img> 标签的元素
  1. 查找具有特定属性值的元素:
soup.find_all(attrs={"class": "title"})   # 查找所有 class 属性为 "title" 的元素
soup.find_all(id="content")   # 查找所有 id 属性为 "content" 的元素
  1. 使用正则表达式进行匹配:
import re
soup.find_all(re.compile("^h"))   # 查找标签名以 "h" 开头的元素
soup.find_all(href=re.compile("example.com"))   # 查找所有href属性包含 "example.com" 的元素
  1. 查找具有特定文本内容的元素:
soup.find_all(string="Hello")   # 查找文本内容为 "Hello" 的元素
soup.find_all(string=re.compile("^H"))   # 查找文本内容以 "H" 开头的元素

这些只是find_all方法的一些基本用法示例,我们当然还可以根据具体情况组合和使用不同的参数来实现更复杂的元素查找。

挑战与创造都是很痛苦的,但是很充实。


相关文章
|
2月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
135 19
|
8月前
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
410 27
|
8月前
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
482 4
JSON数据解析实战:从嵌套结构到结构化表格
|
9月前
|
数据采集 存储 调度
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
181 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
|
8月前
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
283 4
|
8月前
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
426 3
|
10月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
287 20
|
9月前
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
11月前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
747 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
11月前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
576 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】

推荐镜像

更多
  • DNS