【Python beautiful soup】如何用beautiful soup 解析HTML内容

这篇具有很好参考价值的文章主要介绍了【Python beautiful soup】如何用beautiful soup 解析HTML内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【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 requests

url = "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属性。例如,将第一个

标签的名称修改为new_tag:
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 BeautifulSoup

def 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'] = desc
            results.append(result)
    return results

query = '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 BeautifulSoup

def 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'}).text
        directors = 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'}).text
        summary = 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 results

results = 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可以轻松地处理网页数据,具有广泛的应用场景,如爬虫、数据挖掘和数据分析等。文章来源地址https://www.toymoban.com/news/detail-500128.html

到了这里,关于【Python beautiful soup】如何用beautiful soup 解析HTML内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试|Beautiful Soup库详细使用指南

    简介 Beautiful Soup是一款强大的Python库,广泛用于解析HTML和XML文档,从中提取数据并进行处理。它的灵活性和易用性使得数据抽取变得简单,本文将详细介绍Beautiful Soup库的基本用法和示例。 安装Beautiful Soup 首先,需要确保我们已经安装了Python。然后,可以使用以下命令通过

    2024年01月22日
    浏览(44)
  • Beautiful AI:演示文稿制作工具

    【产品介绍】​ 名称​              Beautiful AI​ 上线/成立时间​              Beautiful.ai是一家创立于2017年的美国创业公司。​ 具体描述              Beautiful.ai是一款基于云计算

    2024年02月08日
    浏览(40)
  • Atcoder Beginner Contest 324 F Beautiful Path 题解-分数规划

    为了更好的阅读体验,请点击这里 分数规划小技巧: 尽可能将式子写成存在某种取值,使得不等式成立的形式。 不然可能需要绕几个弯才能想出来。 题目链接 题目大意:给出一个 DAG,每条边有一个 (b_i, c_i) ,保证从编号小的边向编号大的边连边,且 (1) 到 (n) 必有路径

    2024年02月08日
    浏览(36)
  • LeetCode每日一题(2457. Minimum Addition to Make Integer Beautiful)

    You are given two positive integers n and target. An integer is considered beautiful if the sum of its digits is less than or equal to target. Return the minimum non-negative integer x such that n + x is beautiful. The input will be generated such that it is always possible to make n beautiful. Example 1: Input: n = 16, target = 6 Output: 4 Explanation: Init

    2023年04月16日
    浏览(94)
  • C语言入门到精通之练习七:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

    题目: 输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 程序分析: 字符共有256个。不同字符,图形不一样。 VC6.0下出现中文乱码(原因+解决方法): 176的16进制是B0,219的16进制是DB,0xB0DB是\\\"佰\\\"字的内码,所以输出的就是\\\"佰\\\"了。 主要原因是文件信息的代码页不同,我们

    2024年01月23日
    浏览(35)
  • vue-admin-beautiful:npm ERR! code ERESOLVE && npm ERR! code E451

    记录一个离谱的编译错误。 克隆vue-admin-beautiful项目,master分支可以正常拉取,vue3.0-antdv编译报下面的错误。 尝试一: $ cnpm install Install fail! Error: GET https://registry.npmmirror.com/vab-config response 451 status Error: GET https://registry.npmmirror.com/vab-config response 451 status 尝试二: $ npm install n

    2023年04月08日
    浏览(50)
  • Python中bs4的soup.find()和soup.find_all()用法

    我们在使用python对网页爬虫的时候,经常会得到一些html数据,因此我们就会利用soup.find()和soup.find_all()方法来筛选出想要的数据。  1.1利用name来查找 代码如下:  结果如下: h1 class=\\\"item\\\" id=\\\"x1\\\"蔡x坤/h1 1.2利用属性attrs来寻找 代码如下: 结果如下:  div class=\\\"item\\\" id=\\\"x3\\\" span你干

    2024年03月20日
    浏览(42)
  • Python之html2text,清晰解读HTML内容!

    更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python之html2text,清晰解读HTML内容,全文3900字,阅读大约10分钟。 HTML是Web开发中常见的标记语言,但有时我们需要将HTML内容转换为纯文本,以便进行更灵活的处理和分析。在Python中,有一个强大的库叫做 ht

    2024年02月04日
    浏览(32)
  • Python爬虫——BeautifulSoup,获取HTML中文档,标签等内容

    将复杂的HTML文档转换成一个复杂的树形结构,每个结点都是一个Python对象,所有对象可以分为四种: Tag NavigableString BeautifulSoup Comment 首先要引入该函数,再打开相应的html文件读取其中的内容,在使用BeautiSoup对其进行解析,解析的时候要使用相应类型的解析器html.parser bs当中

    2024年02月06日
    浏览(48)
  • python解析html基础操作

    目录 一、前提 二、html内容转换 三、元素的获取 1.获取html所有标签节点 2.查找指定标签的所有节点 3.查找指定属性名称的节点 4.查找指定标签名称的内容 5.查找指定标签的父节点 6.查找指定标签的所有属性的值 7.查找指定标签和属性的节点 8.查找指定标签,属性和属性值的节

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包