`
uule
  • 浏览: 6349183 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

【爬虫解析5】Beautiful Soup

 
阅读更多

 Beautiful Soup的用法

 

from bs4 import BeautifulSoup

html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><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>
"""

soup = BeautifulSoup(html)
	
#打印一下 soup 对象的内容,格式化输出	
print(soup.prettify())
	
	
#===================================	

#(1)Tag
#获取标签内容	
#soap+标签 查找的是在所有内容中的第一个符合要求的标签
print(soup.title)
	#<title>The Dormouse's story</title>
print(soup.head)
print(soup.a)
print(soup.p)
	#<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
	

#验证对象类型	
print(type(soup.a))
	##<class 'bs4.element.Tag'>
	
#把 p 标签的所有属性打印输出了出来
print(soup.p.attrs)	
	# {'class': ['title'], 'name': 'dromouse'}

#Tag的name属性	
print(soup.name)	
print(soup.head.name)	
	#[document]
	#head
	
#单独获取某个属性
print(soup.p['class'])
	#['title']	
print(soup.p.get('class'))
	#['title']	
	
	
#更改或新增属性内容
soup.p['class']="newClass"
print(soup.p)
	#<p class="newClass" name="dromouse"><b>The Dormouse's story</b></p>	
	
#删除属性	
del soup.p['class']
print(soup.p)
#<p name="dromouse"><b>The Dormouse's story</b></p>	
	

#=============================	
#(2)NavigableString
#获取标签内容
print(soup.p.string)	
	#The Dormouse's story

print(soup.a.string)	
	#Elsie
	
#标签内容类型
print(type(soup.p.string))
	##<class 'bs4.element.NavigableString'>
	

#=============================		
#(3)BeautifulSoup
#BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性来感受一下	
print(type(soup.name))
	#<type 'unicode'>
print(soup.name)
	# [document]
print(soup.attrs) 
	#{} 空字典	
	
#=============================		
#(4)Comment
#Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号	
print(soup.a)
	#<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
print(soup.a.string)
	#Elsie 
print(type(soup.a.string))
	#<class 'bs4.element.Comment'>
	
	

 

遍历文档树

from bs4 import BeautifulSoup

html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><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>
"""

soup = BeautifulSoup(html)
	
print("==========================================")
#遍历文档树

#(1)直接子节点.contents  .children
#.contents 和 .children 属性仅包含tag的直接子节点
print(soup.head.contents)
	#[<title>The Dormouse's story</title>]
print(soup.head.contents[0]	)
	#<title>The Dormouse's story</title>
print(soup.head.contents[0].string	)
	#The Dormouse's story


print(soup.head.children)
	#<listiterator object at 0x7f71457f5710>
for child in  soup.head.children:
    print(child)
		#<title>The Dormouse's story</title>

print("=======================1")
	
for child in  soup.p.children:
    print(child)	
		#<b>The Dormouse's story</b>
	
print("=======================2")	
for child in  soup.body.children:
    print(child)


print("==========================================")
#(2)所有子孙节点.descendants 
for child in soup.descendants:
    print(child)

#(3)节点内容:.string 属性
#如果一个标签里面没有标签了,那么 .string 就会返回标签里面的内容。如果标签里面只有唯一的一个标签了,那么 .string 也会返回最里面的内容。

print(soup.head.string)
#The Dormouse's story
print(soup.title.string)
#The Dormouse's story

#如果tag包含了多个子节点,tag就无法确定,string 方法应该调用哪个子节点的内容, .string 的输出结果是 None
print(soup.html.string)
# None


#(4)多个内容 .strings .stripped_strings 属性
#for string in soup.strings:
 #   print(repr(string))

#输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容
for string in soup.stripped_strings:
    print(repr(string))


#(5)父节点 .parent 属性	
p = soup.p
print(p.parent.name)
	#body	
print(soup.title.parent.name	)
	#head
	
	
#(6)全部父节点 .parents 	
content = soup.head.title.string
for parent in  content.parents:
    print(parent.name)
		#title
		#head
		#html
		#[document]
	
#(7)兄弟节点
#知识点:.next_sibling .previous_sibling 属性	
#兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 则与之相反,如果节点不存在,则返回 None
#注意:实际文档中的tag的 .next_sibling 和 .previous_sibling 属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行	

print soup.p.next_sibling
#       实际该处为空白
print soup.p.prev_sibling
#None   没有前一个兄弟节点,返回 None
print soup.p.next_sibling.next_sibling
#<p class="story">Once upon a time there were three little sisters; and their names were
#<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,
#<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
#<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
#and they lived at the bottom of a well.</p>


#(8)全部兄弟节点
#知识点:.next_siblings .previous_siblings 属性	
for sibling in soup.a.next_siblings:
    print(repr(sibling))	
	
#(9)前后节点
#知识点:.next_element .previous_element 属性	
#与 .next_sibling .previous_sibling 不同,它并不是针对于兄弟节点,而是在所有节点,不分层次

#<head><title>The Dormouse's story</title></head>
#那么它的下一个节点便是 title,它是不分层次关系的
print(soup.head.next_element)
#<title>The Dormouse's story</title>

	
#(10)所有前后节点
#知识点:.next_elements .previous_elements 属性	
for element in last_a_tag.next_elements:
    print(repr(element))	
	

 

。。

分享到:
评论

相关推荐

    HTML解析库Beautiful Soup.7z

    **标签“爬虫”和“python”** 提示了Beautiful Soup在数据抓取领域的应用,它常与请求库如`requests`配合,首先发送HTTP请求获取网页HTML,然后使用Beautiful Soup解析返回的HTML内容。 综上所述,Beautiful Soup...

    Python 爬虫入门的教程之Beautiful Soup解析

    Python 爬虫入门教程之 Beautiful Soup 解析 本教程主要讲解 Python 爬虫入门知识,通过 Beautiful Soup 解析网页,抓取中国旅游网首页信息,了解网页结构,使用 requests 库抓取网站数据,并进行数据清洗和组织。 ...

    Python爬虫利器二之Beautiful Soup的用法.zip_python_爬虫_爬虫 python_爬虫 pyth

    总的来说,Beautiful Soup作为Python爬虫开发的重要工具,以其简洁的API和强大的解析能力,极大地简化了数据提取的过程。通过熟练掌握Beautiful Soup的使用,你将能更好地应对各种复杂的网页结构,高效地实现你的...

    Beautiful Soup爬虫框架在Python爬虫开发中的重要性

    Beautiful Soup主要应用于爬虫开发中,用于解析HTML页面,从中提取数据,如爬取网站上的新闻、商品信息、图片等内容,以及对数据进行分析、挖掘、可视化等处理。同时,也可以用Beautiful Soup来处理XML文档,如解析...

    Python 使用Beautiful Soup 爬虫教程.pdf

    **Python使用Beautiful Soup爬虫教程** Beautiful Soup是一个强大的Python库,专门用于从HTML和XML文档中提取数据。它提供了一种简单易用的接口,帮助开发者解析和导航复杂的网页结构。在本教程中,我们将深入探讨...

    python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例

    python爬虫模块Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下: Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能...

    完整版精品Python网络爬虫教程 数据采集 信息提取课程 04-Beautiful Soup库入门(共53页).pptx

    在实际网络爬虫项目中,我们通常会结合其他库如`requests`来获取网页内容,再用Beautiful Soup解析。例如,`requests.get()`可以用来发送HTTP请求,获取HTML页面: ```python import requests response = requests...

    Beautiful Soup4.2.0 中文文档

    Beautiful Soup库能够兼容多种HTML和XML解析器,包括Python标准库中的`html.parser`,以及第三方库如`lxml`和`html5lib`。这些解析器能够根据不同的需求和偏好来处理文档内容。 安装Beautiful Soup的过程非常简单,...

    Beautiful Soup.pdf

    5. **信息的标记形式** - **XML**:扩展标记语言,用于结构化数据,支持注释。 - **JSON**:JavaScript对象表示法,类似于Python的字典,没有注释。 - **YAML**:一种轻量级的数据序列化语言,没有严格的类型系统...

    使用Python的Requests库和Beautiful Soup库来爬取豆瓣电影Top250的数据

    5. 存储和处理数据: 最后,我们可能需要将这些数据保存到CSV、JSON或其他格式的文件中,以便后续分析。例如,使用pandas库可以方便地实现这一点: ```python import pandas as pd data = { '电影名称': movie_...

    Python爬虫数据抽取(二):解析库Beautiful Soup 4

    【Python爬虫数据抽取(二):解析库Beautiful Soup 4】 在Python的网络爬虫领域,BeautifulSoup是一个不可或缺的工具,它是一个用于解析HTML和XML文档的库,特别适合于数据抽取。BeautifulSoup 4(简称bs4)提供了...

    Beautiful Soup 4.4.0 文档

    Beautiful Soup是一个强大的Python库,专门用于解析和处理HTML和XML文档。它是爬虫程序员和网页开发者的好帮手,能够从复杂的文档中提取数据,使得解析网页内容变得更加轻松和高效。 1. BeautifulSoup的主要功能与...

    python爬虫-Beautiful Soup库入门(四)

    **Python爬虫与Beautiful Soup库入门** Beautiful Soup是Python中常用的HTML和XML解析库,它提供了简单的导航、搜索和修改解析树的接口,是进行网页抓取和数据提取的得力工具。本篇将详细介绍Beautiful Soup库的...

    Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    要想学好爬虫,必须把基础打扎实,之前发布了两篇文章,分别是使用XPATH和requests爬取网页,今天的文章是学习Beautiful Soup并通过一个例子来实现如何使用Beautiful Soup爬取网页。 什么是Beautiful Soup ...

    Beautiful Soup4.2.0解析库中文文档

    Beautifulsoup4 是一个强大的Python爬虫web解析库,可以用来对get到的网页进行解析。

    java爬虫登录验证码解析.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    Python 爬虫 虎牙主播热度排名、礼物榜 beautiful soup bs4 浏览器多页爬虫

    5. Jupyter Notebook:Jupyter Notebook是一个交互式的计算环境,允许用户结合代码、文本、图像和数学公式进行数据分析和报告编写。在这个项目中,我们可能使用Jupyter Notebook来编写和测试爬虫代码,同时展示和...

Global site tag (gtag.js) - Google Analytics