1.安装
pip install beautifulsoup4
或者
python setup.py install(附件)
2.介绍
解析(markup为html文件内容)
BeautifulSoup(markup, “html.parser”)-》Python 2.7.3以上
BeautifulSoup(markup, “lxml”)-》速度快
BeautifulSoup(markup, “html5lib”)-》容错性好,速度慢from bs4
3.举例
import BeautifulSoup
soup = BeautifulSoup(html)
#soup = BeautifulSoup(open('index.html'))
print soup.prettify()#格式化
4.使用
1.TAG
html1='<head><title>The Dormouse's story</title></head>'
soup = BeautifulSoup(html1)
print soup.title
#<title>The Dormouse's story</title>#仅仅取第一条
print soup.head
#<head><title>The Dormouse's story</title></head>
2.attrs
html2='<p class="title" name="dromouse"><b>The Dormouse's story</b></p>'
soup = BeautifulSoup(html2)
print soup.p.attrs
#{'class': ['title'], 'name': 'dromouse'}
print soup.p['class']
#['title']
print soup.p.get('class')
#['title']
3.string
print soup.p.string
#The Dormouse's story
4.Comment
无注释的文本
html3='<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>'
soup = BeautifulSoup(html2)
if type(soup.a.string)==bs4.element.Comment:
print soup.a.string
5.contents
print soup.head.contents #打印子节点,为list集合
#[<title>The Dormouse's story</title>]
6.children
for child in soup.body.children:#list生成器子节点
print child
7.descendants
for child in soup.descendants:#递归打印所有子节点
print child
8.stripped_strings
for string in soup.stripped_strings:#子节点下所有string,且去除换行符等空白
print(repr(string))
# u"The Dormouse's story"
# u"The Dormouse's story"
# u'Once upon a time there were three little sisters
9.parent parents
p = soup.p#父节点
print p.parent.name
#body</strong>
10.find_all( name , attrs , recursive , text , **kwargs )
1)name-tag内容
A.传字符串
soup.find_all('b')
# [<b>The Dormouse's story</b>]
B.传正则表达式
import re
for tag in soup.find_all(re.compile("^b")):
print(tag.name)
# body
# b
C.传列表
soup.find_all(["a","b"])
# [<b>The Dormouse's story</b>,
#<a href="http://example.com/elsie" id="link1">Elsie</a>,
#<a href="http://example.com/lacie" id="link2">Lacie</a>]
D.传 True
True 可以匹配任何值,但是不会返回字符串节点
For tag in soup.find_all(True):
print(tag.name)
# html
# head
# title
# body
# p
E.传方法
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
# [<p class="title"><b>The Dormouse's story</b></p>,
# <p class="story">Once upon a time there were...</p>,
# <p class="story">...</p>]
2)keyword
soup.find_all(id='link2')
# [<a href="http://example.com/lacie" id="link2">Lacie</a>]
soup.find_all(href=re.compile("elsie"))
# [<a href="http://example.com/elsie" id="link1">Elsie</a>]
soup.find_all(href=re.compile("elsie"), id='link1')
# [<a href="http://example.com/elsie" id="link1">three</a>]
Class为关键字,需加下划线
soup.find_all("a", class_="sister")
有些tag属性在搜索不能使用,比如HTML5中的 data-* 属性
data_soup.find_all(attrs={"data-foo": "value"})
# [<div data-foo="value">foo!</div>]
3)text 参数
通过 text 参数可以搜搜文档中的字符串内容.与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表, True
soup.find_all(text="Elsie")
# [u'Elsie']
soup.find_all(text=["Tillie", "Elsie", "Lacie"])
# [u'Elsie', u'Lacie', u'Tillie']
soup.find_all(text=re.compile("Dormouse"))
[u"The Dormouse's story", u"The Dormouse's story"]
4)limit 参数
当搜索到的结果数量达到 limit 的限制时,就停止搜索返回结果.
soup.find_all("a", limit=2)
# [<a href="http://example.com/elsie" id="link1">Elsie</a>,
# <a href="http://example.com/lacie" id="link2">Lacie</a>]
5)recursive 参数
调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False .
11.find( name , attrs , recursive , text , **kwargs )
它与 find_all() 方法唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果
12.find_parents() find_parent()
13.CSS选择器select
soup.select(),返回类型是 list
(1)通过标签名查找
print soup.select('title')
#[<title>The Dormouse's story</title>]
print soup.select('a')
(2)通过类名查找
print soup.select('.sister')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
(3)通过 id 名查找
print soup.select('#link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
(4)组合查找
组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开
print soup.select('p #link1')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
(5)直接子标签查找
print soup.select("head > title")
#[<title>The Dormouse's story</title>]
(6)属性查找
print soup.select('a[class="sister"]')
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
(7)通配符
print soup.select('a[class*="sister"]')#包含sister
print soup.select('a[class$="sister"]')# sister结尾
print soup.select('a[class^="sister"]') # sister开头
相关推荐
Beautiful Soup是由Leonard Richardson编写的Python库,它提供了一种简单的方式来导航、搜索和修改解析树。这个库能够将复杂HTML和XML文档转换成树形结构,使得开发者可以方便地遍历整个文档,提取所需的数据。 ...
**Python使用Beautiful Soup爬虫教程** Beautiful Soup是一个强大的Python库,专门用于从HTML和XML文档中提取数据。它提供了一种简单易用的接口,帮助开发者解析和导航复杂的网页结构。在本教程中,我们将深入探讨...
【Python网络爬虫与Beautiful Soup库入门】 网络爬虫是一种自动化获取互联网信息的程序,它通过模拟人类浏览器的行为,从网站上抓取所需的数据。在Python中,Beautiful Soup库是用于解析HTML和XML文档的强大工具,...
from bs4 import BeautifulSoup ``` 2. 使用Requests发送GET请求: ```python url = 'https://movie.douban.com/top250' # 豆瓣电影Top250的URL response = requests.get(url) ``` 这里的`response`对象包含了...
from bs4 import BeautifulSoup def epub_to_text(epub_file, output_folder): # 创建一个EpubBook对象 book = epub.EpubBook() # 打开EPUB文件 with open(epub_file, 'rb') as f: book = epub.read_epub(f)...
- **使用方法**: 创建 BeautifulSoup 对象,然后利用其提供的方法来操作文档。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'html.parser') ``` #### 4. 对象类型 - **Tag**: ...
在Python2.x版本中,Beautiful Soup 4(BS4)是常用的选择,尽管现在Python3已经成为主流,但BS4仍然能够很好地支持Python2.x。以下是对Beautiful Soup库的详细介绍: 1. **Beautiful Soup简介** - Beautiful Soup...
请注意,这些旧版本可能不支持现代Python版本,因此在最新Python环境下推荐使用Beautiful Soup 4,可通过pip安装: ```bash $ pip install beautifulsoup4 ``` **Beautiful Soup的基本使用** BeautifulSoup的核心...
from bs4 import BeautifulSoup soup = BeautifulSoup(demo, "html.parser") ``` 其中,`demo`可以是HTML字符串或者文件,`"html.parser"`是默认的HTML解析器,也可以选择其他解析器如`lxml`来解析XML文件。 2....
- **定义**:Beautiful Soup(简称“BS”)是Python语言的一个库,主要用于解析HTML或XML文档,并从中提取所需的数据。 - **作用**:通过喜欢的转换器(如lxml, html5lib等),提供方便的文档导航、搜索、更改文档的...
1.Beautiful Soup提供了一些简单的方法和Python术语,用于检索和修改语法树:一个用于解析文档并提取相关信息的工具包。这样你写一个应用不需要写很多代码。 2.Beautiful Soup自动将输入文档转换为Unicode编码,并将...
**Python爬虫与Beautiful Soup库入门** Beautiful Soup是Python中常用的HTML和XML解析库,它提供了简单的导航、搜索和修改解析树的接口,是进行网页抓取和数据提取的得力工具。本篇将详细介绍Beautiful Soup库的...
这个任务涉及到的技术主要包括Python的基础知识、BeautifulSoup库以及BS4(BeautifulSoup 4)的使用,以及如何处理浏览器多页爬虫的情况。以下是这些知识点的详细说明: 1. Python基础:Python是一种高级编程语言,...
在开始使用Beautiful Soup之前,需要导入库并创建一个BeautifulSoup对象。例如: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'html.parser') ``` 其中`html_doc`是你要解析的HTML文档...
from bs4 import BeautifulSoup ``` 3. **解析HTML**: ```python soup = BeautifulSoup(html_doc, 'html.parser') ``` 4. **解析XML**: ```python soup = BeautifulSoup(xml_doc, 'xml') ``` #### 三、...
[Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/) 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup...
Python的Beautiful Soup库是网页抓取领域中的一个强大工具,尤其适合初学者。它通过提供简洁的API,使得解析HTML和XML文档变得易如反掌。在这个解析库的帮助下,你可以轻松地导航、搜索和修改文档结构,从而提取所需...
Beautiful Soup 提供了一系列方法用于导航剖析树,使得开发者可以轻松地遍历和检索文档中的内容。 - **parent** - 获取当前标签的父标签。 - **contents** - 返回当前标签的所有子节点。 - **string** - 访问当前...