python模块——Beautiful Soup模块(bs4)

bs4模块

一、模块简介

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

二、方法利用

1.引入模块

# 引入
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
四种解析器

2.几个简单的浏览结构化数据的方法:

#获取Tag,通俗点就是HTML中的一个个标签
#获取Tag,通俗点就是HTML中的一个个标签
soup.title                    # 获取整个title标签字段:<title>The Dormouse's story</title>
soup.title.name               # 获取title标签名称  :title
soup.title.parent.name        # 获取 title 的父级标签名称:head

soup.p                        # 获取第一个p标签字段:<p class="title"><b>The Dormouse's story</b></p>
soup.p['class']               # 获取第一个p中class属性值:title
soup.p.get('class')           # 等价于上面

soup.a                        # 获取第一个a标签字段
soup.find_all('a')            # 获取所有a标签字段
soup.find(id="link3")         # 获取属性id值为link3的字段
soup.a['class'] = "newClass"  # 可以对这些属性和内容等等进行修改
del bs.a['class']             # 还可以对这个属性进行删除

soup.find('a').get('id')      # 获取class值为story的a标签中id属性的值

soup.title.string             # 获取title标签的值  :The Dormouse's story

三、具体利用

1、获取拥有指定属性的标签

方法一:获取单个属性
soup.find_all('div',id="even")            # 获取所有id=even属性的div标签
soup.find_all('div',attrs={'id':"even"})    # 效果同上

方法二:
soup.find_all('div',id="even",class_="square")            # 获取所有id=even并且class=square属性的div标签
soup.find_all('div',attrs={"id":"even","class":"square"})    # 效果同上

2、获取标签的属性值

方法一:通过下标方式提取
for link in soup.find_all('a'):
    print(link['href'])        //等同于 print(link.get('href'))

方法二:利用attrs参数提取
for link in soup.find_all('a'):
    print(link.attrs['href'])

3、获取标签中的内容

divs = soup.find_all('div')        # 获取所有的div标签
for div in divs:                   # 循环遍历div中的每一个div
    a = div.find_all('a')[0]      # 查找div标签中的第一个a标签      
    print(a.string)              # 输出a标签中的内容

如果结果没有正确显示,可以转换为list列表

4、去除\n换行符等其他内容   stripped_strings

divs = soup.find_all('div')
for div in divs:
    infos = list(div.stripped_strings)        # 去掉空格换行等
    bring(infos)

四、输出

1、格式化输出   prettify()

prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行
markup = '<a href="http://example.com/">I linked to <i>example.com</i></a>'
soup = BeautifulSoup(markup)
soup.prettify()
# '<html>\n <head>\n </head>\n <body>\n  <a href="http://example.com/">\n...'

print(soup.prettify())
# <html>
#  <head>
#  </head>
#  <body>
#   <a href="http://example.com/">
#    I linked to
#    <i>
#     example.com
#    </i>
#   </a>
#  </body>
# </html>

2、get_text()

如果只想得到tag中包含的文本内容,那么可以调用 get_text() 方法,这个方法获取到tag中包含的所有文版内容包括子孙tag中的内容,并将结果作为Unicode字符串返回:
markup = '<a href="http://example.com/">\nI linked to <i>example.com</i>\n</a>'
soup = BeautifulSoup(markup)

soup.get_text()
u'\nI linked to example.com\n'
soup.i.get_text()
u'example.com'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: urllib 和 Beautiful Soup (bs4) 是 Python 中常用的网络爬虫库。 urllib 用于发送 HTTP 请求并接收响应,可以用来抓取网页内容。 Beautiful Soup 用于解析 HTML 或 XML 文档,可以帮助你从网页中提取有用的信息。 urllib 和 Beautiful Soup 的工作流程大致如下: 1. 使用 urllib 发送 HTTP 请求并接收响应。 2. 使用 Beautiful Soup 解析响应内容,提取有用的信息。 3. 根据需要,对获取的信息进行进一步处理。 urllib 和 Beautiful Soup 的优点是: - 简单易用:urllib 和 Beautiful Soup 提供了丰富的 API,使得网络爬虫的开发变得更加容易。 - 功能强大:urllib 和 Beautiful Soup 支持多种不同的 HTTP 请求方法,可以通过自定义 HTTP 头来模拟浏览器访问,并支持多种解析器,可以解析 HTML 和 XML 文档。 urllib 和 Beautiful Soup 的缺点是: - 运行速度较慢:urllib 和 Beautiful Soup 的运行速度相对较慢,对于大规模的网络爬虫,可能会影响效率。 - 不能处理 JavaScript:urllib 和 Beautiful Soup 只能处理静态的 HTML 或 XML 文档,对于那些使用 JavaScript 动态生成的网页,无法处理。 ### 回答2: urllib和beautifulsoup(bs4)是两个经常被用于网络爬虫的Python库。urllib是一个用于处理网络请求的库,它提供了打开URL、发送HTTP请求、处理响应等功能。而beautifulsoup是一个用于解析HTML和XML文档的库,它可以从HTML页面中提取出需要的信息。 urllib的工作流程如下:首先,我们使用urllib的请求方法打开并读取URL地址,获取到对应的HTML页面内容。接下来,将这个内容传给beautifulsoup进行解析。利用beautifulsoup,我们可以通过选择器(CSS选择器或Xpath表达式)来定位和提取出我们需要的标签或元素,或者找到页面中的特定文本。 urllib和beautifulsoup的优点是: 1. 简单易用:它们都是Python标准库中的模块,不需额外安装即可使用,使用方法也相对简单。 2. 功能强大:urllib可以方便地发送HTTP请求、处理响应和获取页面内容,而beautifulsoup则提供了强大的解析和搜索功能,可以高效地从HTML或XML中提取信息。 3. 广泛支持:urllib支持各种HTTP请求方法(GET、POST等),并且兼容不同的Python版本。beautifulsoup则支持解析多种类型的文档,包括HTML、XML等。 4. 开源免费:它们都是开源免费的软件,可以根据自己的需求进行调整和修改。 然而,它们也存在一些缺点: 1. 执行效率有限:在大规模爬取数据时,urllib运行速度可能较慢,因为它的功能相对简单,不能进行高级的并发处理。 2. 需要编写较多代码:使用这两个库需要编写一些代码来发送请求、处理响应和解析页面,对于不熟悉Python的开发者来说可能需要一定的学习成本。 3. 对于一些特殊情况的处理有限:urllib和beautifulsoup虽然功能强大,但对于一些特殊的网页结构或反爬虫机制的处理可能有一定限制,需要开发者根据具体情况进行处理。 综上所述,urllib和beautifulsoup是实现网络爬虫功能的两个重要工具,它们的简单易用和功能强大使得它们在爬取数据和解析网页时广受开发者青睐,并被用于各种数据挖掘和分析的应用场景。 ### 回答3: urllib和bs4是Python中用于处理URL和解析HTML的两个常用库。 urllib库主要用于打开URL和进行网页内容读取。其工作流程大致如下: 1. 导入urllib库和相关模块。 2. 使用urllib的urlopen方法打开URL链接,获取一个HTTPResponse对象。 3. 通过HTTPResponse对象的read方法读取网页内容,并使用decode方法解码为字符串。 4. 对获取到的网页内容进行进一步处理,比如解析HTML标签、提取数据等。 bs4库是基于HTML解析器(如lxml、html5lib等)的Python包,用于从HTML文档中提取数据。其工作流程大致如下: 1. 导入bs4库和相关模块。 2. 使用bs4的BeautifulSoup类和指定的HTML解析器创建一个BeautifulSoup对象。 3. 使用BeautifulSoup对象对HTML文档进行解析,提取需要的数据。 4. 进行数据的处理和操作,如提取特定标签、查找特定内容、遍历等操作。 这两个库的优点和缺点如下: urllib库的优点: 1. 自带的模块,不需要额外安装。 2. 功能比较简单,适用于简单的URL读取和内容获取。 urllib库的缺点: 1. 功能相对较少,不能方便地进行HTML解析和提取数据。 2. 对于复杂的URL读取、请求和处理,需要编写较多的代码。 bs4库的优点: 1. 可以方便地进行HTML解析和提取数据,提供了一系列灵活的方法。 2. 支持多种HTML解析器,可以根据需要选择合适的解析器。 bs4库的缺点: 1. 需要额外安装,可能会增加项目的依赖。 2. 对于简单的URL读取和内容获取,bs4库可能显得过于复杂,不是最好的选择。 综上所述,urllib适用于简单的URL读取和内容获取,而bs4适用于复杂的HTML解析和数据提取。根据实际需求,我们可以选择合适的库来完成相应的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunderclap_

点赞、关注加收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值