【Python beautiful soup】如何用beautiful soup 解析HTML内容
美丽汤(Beautiful Soup)是一个流行的Python库,用于从HTML或XML文件中提取数据。它将复杂的HTML文件转化为一个Python对象,使得用户可以更方便地解析、搜索和修改HTML内容。本文将介绍如何使用Beautiful Soup解析HTML内容,并给出参考资料和优秀实践。
一、Beautiful Soup的基本使用
1.安装
要使用BeautifulSoup,首先需要安装它。可以使用pip安装:
pip install beautifulsoup4
2.导入
安装完成后就可以导入BeautifulSoup了:
from bs4 import BeautifulSoup
3.获取HTML
要在BeautifulSoup中解析HTML,需要先将HTML文件读取为字符串。可以使用Python的标准库处理文件IO来读取文件:
with open("index.html", "r", encoding='utf-8') as f:html = f.read()
如果要从URL中获取HTML,则可以使用Python的requests库:
import requestsurl = "https://www.example.com"
response = requests.get(url)
html = response.content
4.解析HTML
现在有了HTML字符串,就可以使用BeautifulSoup来解析HTML了。首先需要创建一个BeautifulSoup对象:
soup = BeautifulSoup(html, 'html.parser')
这里的第二个参数告诉BeautifulSoup使用哪种解析器(例如,‘html.parser’ 使用Python标准库中的解析器来解析HTML)。在创建BeautifulSoup对象后,就可以使用它的方法和属性来访问HTML内容了。
5.搜索标签
解析HTML后,可以使用BeautifulSoup的方法来搜索标签。例如,要搜索所有的
标签,可以使用soup.find_all(‘p’)方法:
p_tags = soup.find_all('p')
这将返回一个包含
标签的BeautifulSoup对象列表。如果只需要第一个
标签,可以使用soup.find(‘p’)方法。
6.获取标签内容
要获取标签的内容,在BeautifulSoup对象上调用标签的.text属性即可。例如,获取第一个
标签的文本内容:
first_p_text = soup.find('p').text
第一个
标签的完整标签和其文本内容:
first_p = soup.find('p')
first_p_tag = str(first_p)
first_p_text = first_p.text
7.获取标签属性
要获取标签的属性,可以在标签上调用相应的属性名。例如,获取第一个标签的href属性:
first_a_href = soup.find('a')['href']
二、Beautiful Soup实践
1.搜索标签
BeautifulSoup提供了各种方法来搜索标签,如上文所述。下面我们将进行更详细的介绍。
find_all()方法
find_all()方法返回BeautifulSoup对象列表,其中包含符合指定参数的所有标签。它的基本用法是:
soup.find_all('tag', attributes)
其中tag是要搜索的标签名,attributes是一个字典,包含标签的属性和属性值。
例如,要搜索文档中所有的
soup.find_all('div')
如果要搜索标签的属性,则可以使用以下代码:
soup.find_all('div', class_='my_class')
其中class_是标签的class属性,因为在Python中class是一个保留字,所以需要在后面加上下划线。
如果要搜索多个标签,则可以将所有的标签名放在一个列表中:
soup.find_all(['div', 'p'])
如果要搜索所有的标签,则可以调用soup.find_all(True)。
此外,find_all()方法还可以接受一些额外的参数,如string参数,用于搜索具有特定字符串的标签:
soup.find_all(string='example')
或使用正则表达式搜索:
import re
soup.find_all(string=re.compile('^example'))
find()方法
find()方法与find_all()方法类似,但它只返回第一个匹配项。例如,要查找第一个
标签:
soup.find('p')
如果要在一个标签的子标签中查找,则可以使用该标签的方法:
div = soup.find('div')
p = div.find('p')
其他方法
BeautifulSoup还提供了一些其它的方法,如select()方法。该方法基于CSS选择器选择标签:
soup.select('div p')
```python
此外,还有find_parents(),find_next_siblings()等方法,用于搜索标签的上下文和兄弟关系。2.修改HTML内容BeautifulSoup不仅可以用于解析HTML,还可以用于修改其内容。下面将介绍一些常用的方法。修改标签的属性如果要修改标签的属性,可以在标签上调用相应的属性名。例如,将第一个<a>标签的href属性修改为new_href:
```python
soup.find('a')['href'] = 'new_href'
如果要添加一个新的属性,可以使用相同的语法:
soup.find('a')['new_attr'] = 'new_value'
修改标签的文本内容
如果要修改标签的文本内容,可以在标签上调用.text属性。例如,将第一个
标签的文本内容修改为new_text:
soup.find('p').text = 'new_text'
修改标签的名称
如果要修改标签的名称,可以在标签上调用.name属性。例如,将第一个
soup.find('div').name = 'new_tag'
删除标签
如果要删除一个标签,可以使用.decompose()方法。例如,将第一个
标签删除:
soup.find('p').decompose()
插入标签
如果要在HTML中插入一个新的标签,可以使用soup.new_tag()方法创建一个新标签,然后将其插入到DOM中。例如,将一个新的
标签插入到HTML的开头:
new_p = soup.new_tag('p', attrs={'class': 'new_class'})
new_p.string = 'new_paragraph'
soup.insert(0, new_p)
此外,insert_after()和insert_before()方法也可以用于在DOM中插入标签。
3.将HTML转换为字符串
要将解析后的HTML转换为字符串,可以在BeautifulSoup对象上调用.prettify()方法。例如:
print(soup.prettify())
这将返回一个格式化和缩进后的HTML字符串,可以用于保存或打印解析后的HTML。
三、参考资料
下面列出了一些关于BeautifulSoup的参考资料。
1.Documentation:
BeautifulSoup的官方文档是学习BeautifulSoup库的最佳资料。它详细介绍了BeautifulSoup的API和使用方法。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
2.Tutorial:
BeautifulSoup的官方教程是一份简单而明了的指南,适合初学者。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#tag
3.Stack Overflow:
Stack Overflow是一个程序员问答网站,可以在这里搜索有关BeautifulSoup的问题和答案。
https://stackoverflow.com/questions/tagged/beautifulsoup
四、优秀实践
下面列出了一些优秀实践,可作为使用BeautifulSoup的模板。
1.爬取X度搜索结果
以下代码使用BeautifulSoup爬取X度搜索结果的
和标签:
import requests
from bs4 import BeautifulSoupdef get_baidu_results(query):url = f"https://www.xxx.com/s?wd={query}"response = requests.get(url)soup = BeautifulSoup(response.content, 'html.parser')results = []for item in soup.find_all('div', {'class': 'c-container'}):heading = item.find('h3', {'class': 't'})if heading:link = heading.find('a')url = link.get('href')text = link.text.strip()result = {'url': url, 'text': text}desc = item.find('div', {'class': 'c-abstract'})if desc:desc = desc.text.strip()result['description'] = descresults.append(result)return resultsquery = 'python'
results = get_baidu_results(query)
for result in results:print(result['text'])print(result['url'])print(result['description'])print()
2.爬取Douban电影Top250
以下代码使用BeautifulSoup爬取电影Top250的电影名、导演、演员、评分和简介:
import requests
from bs4 import BeautifulSoupdef get_douban_top250():url = "https://movie.xxx.com/top250"headers = {'User-Agent': 'Mozilla/5.0'}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.content, 'html.parser')results = []for item in soup.find_all('div', {'class': 'item'}):info = item.find('div', {'class': 'info'})title = info.find('span', {'class': 'title'}).textdirectors = info.find('div', {'class': 'bd'}).find_all('span')[1].text.strip().split('\xa0')actors = info.find('div', {'class': 'bd'}).find_all('span')[3].text.strip().split('\xa0')rating = info.find('span', {'class': 'rating_num'}).textsummary = info.find('span', {'class': 'inq'}).text if info.find('span', {'class': 'inq'}) else ''result = {'title': title, 'directors': directors, 'actors': actors, 'rating': rating, 'summary': summary}results.append(result)return resultsresults = get_douban_top250()
for result in results:print(result['title'])print('导演:', result['directors'])print('演员:', result['actors'])print('评分:', result['rating'])print('简介:', result['summary'])print()
五、总结
BeautifulSoup是一个功能强大的Python库,可以用于解析、搜索和修改HTML和XML文件。本文介绍了BeautifulSoup的基本使用、实践和参考资料。使用BeautifulSoup可以轻松地处理网页数据,具有广泛的应用场景,如爬虫、数据挖掘和数据分析等。
【Python beautiful soup】如何用beautiful soup 解析HTML内容相关推荐
- Python 网络爬虫笔记3 -- Beautiful Soup库
Python 网络爬虫笔记3 – Beautiful Soup库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程 ...
- Python 爬虫利器二之 Beautiful Soup 的用法
上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫 B ...
- Python爬虫(三)Beautiful Soup 实战,爬取前程无忧网站
Beautiful Soup介绍 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能. Beautiful Soup自动将输入文档转换为Unicode ...
- Python爬虫利器二之Beautiful Soup的用法
如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HTML或XML标签中的内容. 1. Beaut ...
- python利器怎么用-Python爬虫利器二之Beautiful Soup的用法
The Dormouse's story Once upon a time there were three little sisters; and their names were , Lacie ...
- Python 网络爬虫笔记5 -- Beautiful Soup库实战
Python 网络爬虫笔记5 – Beautiful Soup库实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. ...
- Learn Beautiful Soup(3)——使用Beautiful Soup进行查找
网页中有用的信息通常存在于网页中的文本或各种不同标签的属性值,为了获得这些网页信息,有必要有一些查找方法可以获取这些文本值或标签属性.而Beautiful Soup中内置了一些查找方式: find() ...
- python版本回退_Python爬虫之BeautifulSoup解析之路
上一篇分享了正则表达式的使用,相信大家对正则也已经有了一定的了解.它可以针对任意字符串做任何的匹配并提取所需信息. 但是我们爬虫基本上解析的都是html或者xml结构的内容,而非任意字符串.正则表达式 ...
- python编写登录_通过Python编写一个简单登录功能过程解析
通过Python编写一个简单登录功能过程解析 需求: 写一个登录的程序, 1.最多登陆失败3次 2.登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3.要检验输入是否为空,账号和密码不能为空 ...
最新文章
- 【驱动】GNSS驱动基础
- jsPlumb(3)-基本概念
- 2016弱校联萌十一专场10.2
- 关于crontab命令的学习
- Nginx(一)------简介与安装
- HDu 3449 (有依赖的01背包) Consumer
- Alibaba Dubbo框架同步调用原理分析-2
- css浮动(float)及清除浮动的几种实用方法
- 内网穿透工具ngrok的使用
- ef sqlserver切换到mysql_可以为MySql和SqlServer使用EF上下文吗?
- 腾讯注册狗头表情包商标
- ubuntu16.04卸载firefox,然后再次安装firefox
- mongodb指南(翻译)(十六) - developer zone - 何时使用GridFS
- JS向NPAPI传递参数,并返回结果
- [转载]手机编程与AIDE
- 计算机软考网络工程师中级多少分过,计算机软考网络工程师中级多少分过
- 01使用ILDasm.exe将可执行文件反编译成IL代码
- CPRI vs eCPRI
- py错误jupyter:某个缩进Unindent不匹配任何外部缩进 IndentationError: unindent does not match any outer indentation
- SpringBoot 使用validation数据校验-超级详细 - 第406篇
热门文章
- Eclipse的安装与基本操作(详解配图)
- train-images-idx3-ubyte.gz train-labels-idx1-ubyte.gz 下载
- 计算机新手技巧,绝对实用 电脑操作技巧60招大放送
- 95后字节八年测开晒出工资单:狠补了这个,真香···
- PTA测试 彩虹瓶问题
- pyhton学习笔记-爬虫相关-多进程同步异步的代码实现
- 云和恩墨盖国强受邀担任评委 盛赞2021鲲鹏应用创新大赛
- 汇编语言 将数据区BUF1中的10个数,传送到数据区BUF2中并计算BUF1数据的累加和
- 微信、博客和我的SAP B1
- Com port (1)