基于bs4库的HTML标签遍历方法

基于bs4库的HTML标签遍历方法

import requests
r=requests.get('http://python123.io/ws/demo.html')
demo=r.text

HTML基本格式

1734701-20190925164124587-707151624.png

1734701-20190925164336111-189591601.png

HTML可以看做一棵标签树

遍历方法

!1734701-20190925164205546-1728771246.png

下行遍历

属性说明
.contents将该标签所有的儿子节点存入列表
.children子节点的迭代类型,和contents类似,用于遍历儿子节点
.descendants子孙节点的迭代类型,包含所有的子孙跌点,用于循环遍历
import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')
print(soup.contents)# 获取整个标签树的儿子节点
print(soup.body.content)#返回标签树的body标签下的节点
print(soup.head)#返回head标签
print(len(soup.body.content))#输出body标签儿子节点的个数
print(soup.body.content[1])#获取body下第一个子标签

遍历子孙节点

import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')

for child in soup.body.children:#遍历儿子节点
    print(child)
    

for child in soup.body.descendants:#遍历子孙节点
    print(child)

上行遍历

属性说明
.parent节点的父亲标签
.parents节点的先辈标签的迭代类型,用于循环遍历先辈节点
import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')
print(soup.title.parent)
print(soup.title.parent)
print(soup.parent)
import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')

for parent in soup.a.parents:#遍历先辈的信息
    if parent is None:
        print(parent)
    else:
        print(parent.name)

平行遍历

属性说明
.next_sibling返回HTML文本顺序的下一个平行标签
.previous_sibling返回HTML文本顺序的上一个平行标签
.next_siblings迭代类型,返回HTML文本顺序后续所有的平行标签
.pervious_siblings迭代类型,返回HTML文本顺序前面所有的平行标签

注意

  1. 标签树的平行遍历是有条件的
  2. 平行遍历发生在同一个父亲节点的各节点之间
  3. 标签中的内容也构成了节点

1734701-20190925164237976-390649361.png

import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')

print(soup.a.next_sibling)#a标签的下一个标签
print(soup.a.next_sibling.next_sibling)#a标签的下一个标签的下一个标签
print(soup.a.previous_sibling)#a标签的前一个标签
print(soup.a.previous_sibling.previous_sibling)#a标签的前一个标签的前一个标签

平行遍历

import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')


for sibling in soup.a.next_siblings:#遍历后续节点
    print(sibling)
    
    
for sibling in soup.a.previous_sibling:#遍历之前的节点
    print(sibling)

有层次感的输出-prettify()

import requests
from bs4 import BeautifulSoup

r=requests.get('http://python123.io/ws/demo.html')
demo=r.text
soup=BeautifulSoup(demo,'html.parser')
print(soup.prettify())
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值