BeautifulSoup4解析数据
1.使用urllib爬取百度搜索html2.urllib.request.Request对象封装请求3.urllib发送get请求_中文传参问题4.urllib发送post请求获取html源代码5.获取动态页面html6.忽略SSL证书验证7.使用fake-useragent库伪装请求头8.urllib自定义opener对象设置代理IP9.爬虫cookie的使用10.保存与读取cookie11.使用urllib.error进行请求异常处理12.使用requests库发送get和post请求13.使用Request伪装User-Agent和IP地址14.requests设置超时时间/requests.Session自动保存cookie/verify忽略ssl证书15.re模块的正则表达式规则16.使用re的正则表达式提取腾讯体育新闻摘要
17.BeautifulSoup4解析数据
18.bs4.find_all()搜索文档树和css选择器提取解析后的html数据19.bs4解析并提取人民网新闻标题数据20.xpath解析数据21.谷歌浏览器的xpath插件安装22.使用re和lxml的xpath功能提取纵横中文网小说推荐榜前3页标题23.JSON数据24.使用jsonpath快速提取json的数据25.提取猫眼电影正在热映电影以及评分26.单线程与多线程爬虫BeautifulSoup4(简称bs4)和正则表达式都能处理文本,筛选数据,但它们各有优势和适用场景。在网络爬虫项目中,通常会结合两个工具适用,例如用bs4解析网页结构,然后使用正则表达式提取特定的文本内容。
bs4是用于解析html和xml文档的第3方库,它本身并不直接解析文档,而是依赖于其它解析器来完成这项工作。bs4和解析器的关系可以理解为一个接口和后端服务的关系。
首先在cmd中输入pip install bs4
,或在anaconda prompt中输入conda install bs4
在cmd中输入pip show bs4
和pip show beautifulsoup4
结果如下:
Name: bs4
Version: 0.0.2
Summary: Dummy package for Beautiful Soup (beautifulsoup4)
Home-page:
Author:
Author-email: Leonard Richardson <leonardr@segfault.org>
License: MIT License
Location: C:\Users\89660\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires: beautifulsoup4
Required-by:
-----------------------------------------------------------------------------------
Name: beautifulsoup4
Version: 4.12.3
Summary: Screen-scraping library
Home-page: https://www.crummy.com/software/BeautifulSoup/bs4/
Author:
Author-email: Leonard Richardson <leonardr@segfault.org>
License: MIT License
Location: C:\Users\89660\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires: soupsieve
Required-by: bs4
bs4处理对象的过程只包含有4种类型的对象:Tag、NavigableString、BeautifulSoup、Comment
BeautifulSoup对象是整个文档的根节点,提供了许多方便的方法来导航和搜索文档树。BeautifulSoup对象通过BeautifulSoup(html文档, 解析器)
创建。
Tag是html或xml文档中的一个标签
from bs4 import BeautifulSoup
# 待解析的html文档
html = '''
<html>
<head>
<title>Page Title</title>
</head>
<body>
<div class="info" float='right'>
<p class="text">A paragraph</p>
<span>spider</span>
<strong><!--this is a comment--></strong>
</div>
</body>
</html>
'''
# 调用BeautifulSoup()函数,将html文档传递给指定解析器解析,并返回一个BeautifulSoup对象
soup = BeautifulSoup(html, 'html.parser')
# ----获取<title>标签----
title_tag = soup.title
print(title_tag)
# ----获取<span>标签的名称----
span_tag_name = soup.span.name
print(span_tag_name)
# ----获取标签的属性----
# 获取div标签的所有属性
attrs = soup.div.attrs
print(attrs) # {'class': ['info'], 'float': 'right'}
# 获取div标签的单个属性
attr_class = soup.div['class'] # ['info']
attr_float = soup.div.get('float') # right
print(attr_class, attr_float)
NavigableString意为可导航字符串,NavigableString对象代表了标签(Tag)内的文本内容
可以使用Tag对象的.string
属性获取单个子节点的文本内容,(如果Tag对象包含多个子节点,或没有子节点,或子节点不是文本节点,.string
将返回None),Tag对象的.strings
或.stripped_strings
属性可以遍历标签内所有文本内容,返回的是一个迭代器,每个元素都是NavigableString对象。
# <strong><!--this is a comment--></strong>
title_string = soup.title.string
strong_string = soup.strong.string
print(type(title_string)) # <class 'bs4.element.NavigableString'>
print(type(strong_string)) # <class 'bs4.element.Comment'>
print(title_string) # Page Title
print(strong_string) # this is a comment
# .text属性用于获取标签内所有文本内容的字符串,包括所有子标签内的文本。
# 它会返回一个字符串,其中包含标签内所有文本节点的内容,文本之间默认以空格分隔
print(soup.title.text) # Page Title
print(soup.strong.text) #
# <strong><!--this is a comment-->strong</strong>
title_string = soup.title.string
strong_string = soup.strong.string
print(type(title_string)) # <class 'bs4.element.NavigableString'>
print(type(strong_string)) # <class 'NoneType'>
print(title_string) # Page Title
print(strong_string) # None
# .text属性用于获取标签内所有文本内容的字符串,包括所有子标签内的文本。
# 它会返回一个字符串,其中包含标签内所有文本节点的内容,文本之间默认以空格分隔
print(soup.title.text) # Page Title
print(soup.strong.text) # strong
Comment对象代表文档中的注释内容,Comment是一个特殊的NavigableString对象。
合集:
python爬虫
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?