Beautiful Soup

借助网页的结构和属性等特性来解析网页,这样就可以省去复杂的正则表达式的编写。

Beautiful Soup是Python的一个HTML或XML的解析库。

1.解析器

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup,"html.parser") 执行速度适中、文档容错能力强 2.7.3和3.2.2之前的版本容错能力差
lxml HTML解析器 BeautifulSoup(markup,"lxml") 速度快、文档容错能力强 需要安装C语言库
lxml XML解析器 BeautifulSoup(markup,"xml") 速度快,唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup,"html5lib") 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 速度慢、不依赖外部扩展

综上所述,推荐lxml HTML解析器

1
2
3
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello World</p>','lxml')
print(soup.p.string)

2.基本用法:

1
2
3
4
5
6
7
8
9
10
11
html = '''
<html>
<head><title>Infi-chu example</title></head>
<body>
<p class="title" name="dr"><b>title example</b></p>
<p class="story">link
<a href="http://example.com/elsie" class="sister" id="link1">elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">lacie</a>,
<a href="http://example.com/tillie" class="sister" id="link3">tillie</a>,
last sentence</p>
'''
1
2
3
4
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.prettify())    # 修复html
print(soup.title.string)    # 输出title节点的字符串内容

3.节点选择器:

选择元素

使用soup.元素的方式获取

提取信息

(1)获取名称

使用soup.元素.name获取元素名称

(2)获取属性

使用soup.元素.attrs

使用soup.元素.attrs['name']

(3)元素内容

使用soup.元素.string获取内容

嵌套选择

使用soup.父元素.元素.string获取内容

关联选择

(1)子节点和子孙节点

1
2
3
4
5
6
7
8
9
10
11
html = '''
<html>
<head><title>Infi-chu example</title></head>
<body>
<p class="title" name="dr"><b>title example</b></p>
<p class="story">link
<a href="http://example.com/elsie" class="sister" id="link1"><span>elsie</span></a>,
<a href="http://example.com/lacie" class="sister" id="link2"><span>lacie</span></a>,
<a href="http://example.com/tillie" class="sister" id="link3"><span>tillie</span></a>,
last sentence</p>
'''
1
2
3
4
5
6
7
8
9
10
11
12
from bs4 import BeautifulSoup
# 得到直接子节点,children属性
soup = BeautifulSoup(html,'lxml')
print(soup.p.children)
for i ,child in enumerate(soup.p.children):
    print(i,child)
 
# 得到所有的子孙节点,descendants属性
soup = BeautifulSoup(html,'lxml')
print(soup.p.descendants)
for i,child in enmuerate(soup.p.descendants):
    print(i,child)

(2)父节点和祖先节点

调用父节点,使用parent属性

获取所有祖先节点,使用parents属性

(3)兄弟节点

next_sibling  下一个兄弟元素

previous_sibling  上一个兄弟元素

next_siblings  所有前面兄弟节点

previous_siblings  所有后面兄弟节点

(4)提取信息

4.方法选择器:

find_all()

find_all(name,attrs,recursize,text,**kwargs)

(1)name

1
2
3
soup.find_all(name='ul')
for ul in soup.find_all(name='ul'):
    print(ul.find_all(name='ul'))
1
2
3
4
for ul in soup.find_all(name='ul'):
    print(ul.find_all(name='li'))
    for li in ul.find_all(name='li'):
        print(li.string)

(2)attes

1
2
3
4
5
6
7
# 根据节点名查询
print(soup.find_all(attrs={'id':'list1'}))
print(soup.find_all(attrs={'name':'elements'}))
 
# 也可以写成
print(soup.find_all(id='list1'))
print(soup.find_all(class='elements'))

(3)text

text参数可以用来匹配节点的文本,传入的形式可以是字符串,可以是正则表达式对象

1
2
3
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.find_all(text=re.compile('link')))

find()

返回一个元素

【注】

find_parents()和find_parent()

find_next_siblings()和find_next_sibling()

find_previous_siblings()和find_previous_sibling()

find_all_next()和find_next()

find_all_previous()和find_previous()

5.CSS选择器:

嵌套选择

1
2
for ul in soup.select('ul'):
    print(ul.select('li'))

获取属性

1
2
3
4
for ul in soup.select('ul'):
    print(ul['id'])
    # 等价于
    print(ul.attrs['id'])

获取文本

获取文本除了string属性还有get_text()方法

1
2
3
4
for li in soup.select('li'):
    # 效果一样
    print(li.get_text())
    print(li.string)

Python Beautiful Soup 解析库的使用的更多相关文章

  1. Python爬虫之Beautiful Soup解析库的使用(五)

    Python爬虫之Beautiful Soup解析库的使用 Beautiful Soup-介绍 Python第三方库,用于从HTML或XML中提取数据官方:http://www.crummv.com/ ...

  2. Beautiful Soup解析库的安装和使用

    Beautiful Soup是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据.它拥有强大的API和多样的解析方式.官方文档:https://www.crummy.co ...

  3. 爬虫(五)—— 解析库(二)beautiful soup解析库

    目录 解析库--beautiful soup 一.BeautifulSoup简介 二.安装模块 三.Beautiful Soup的基本使用 四.Beautiful Soup查找元素 1.查找文本.属性 ...

  4. (17)python Beautiful Soup 4.6

    一.安装 1.登陆官网:https://www.crummy.com/software/BeautifulSoup/ 2.下载 3.解压 4.安装 cmd找到文件路径,运行 setup.py buil ...

  5. 爬虫5_python2_使用 Beautiful Soup 解析数据

    使用 Beautiful Soup 解析数据(感谢东哥) 有的小伙伴们对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HT ...

  6. 用Beautiful Soup解析html源码

    #xiaodeng #python3 #用Beautiful Soup解析html源码 html_doc = """ <html> <head> ...

  7. python爬虫之解析库Beautiful Soup

    为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...

  8. python beautiful soup库的超详细用法

    原文地址https://blog.csdn.net/love666666shen/article/details/77512353 参考文章https://cuiqingcai.com/1319.ht ...

  9. Python爬虫系列(四):Beautiful Soup解析HTML之把HTML转成Python对象

    在前几篇文章,我们学会了如何获取html文档内容,就是从url下载网页.今天开始,我们将讨论如何将html转成python对象,用python代码对文档进行分析. (牛小妹在学校折腾了好几天,也没把h ...

随机推荐

  1. http接口测试工具

    2016-08-28 19:24:55 以全国天气预报为例  https://www.juhe.cn/docs/api/id/39/aid/132 (一)火狐的HttpRequester 在URL中填 ...

  2. MDK警告 warning: #111-D: statement is unreachable

    解析: "statement is unreachable"这句一般是说编译器认为程序执行不到这里. 因为本人运行程序的时候,再向前有一个While(1)循环, 理论上说除非你里面 ...

  3. 【转】Linux export 命令

    原文网址:http://mymobile.iteye.com/blog/1407601 Linux export 命令 功能说明: 设置或显示环境变量.(比如我们要用一个命令,但这个命令的执行文件不在 ...

  4. flask 之 rabbit

    使用pika库操作rabbit 查找whereis rabbitmq-server 启动/usr/sbin/rabbitmq-server & 打印了一些rabbitmq服务状态信息,包括内存 ...

  5. 页面初始加载的是默认刷新一次(f5)

    参考找不到了,不好意思.. 两种可以都试一下,解决问题就好了. 1.----------- <script type="text/javascript"> window ...

  6. Linux route命令

    route 命令 route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以 ...

  7. MySQL重启端口被占用处理

    1,查看日志的ERROR 2018-05-23T01:26:59.230382Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set. 201 ...

  8. 利用html5制作一个时钟动画

    <canvas id="clock" width="500" height="500" style="background- ...

  9. Druid.io系列(八):部署

    介绍 前面几个章节对Druid的整体架构做了简单的说明,本文主要描述如何部署Druid的环境 Imply提供了一套完整的部署方式,包括依赖库,Druid,图形化的数据展示页面,SQL查询组件等.本文将 ...

  10. django之分页器

    view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models im ...