python BeautifulSoup使用方法详解


Posted in Python onNovember 21, 2013

直接看例子:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
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="https://3water.com" class="sister" id="link1">Elsie</a>,
<a href="https://3water.com" class="sister" id="link2">Lacie</a> and
<a href="https://3water.com" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc)
print soup.title
print soup.title.name
print soup.title.string
print soup.p
print soup.a
print soup.find_all('a')
print soup.find(id='link3')
print soup.get_text()

结果为:

<title>The Dormouse's story</title>
title
The Dormouse's story
<p class="title"><b>The Dormouse's story</b></p>
<a class="sister" href="https://3water.com" id="link1">Elsie</a>
[<a class="sister" href="https://3water.com" id="link1">Elsie</a>, <a class="sister" href="https://3water.com" id="link2">Lacie</a>, <a class="sister" href="https://3water.com" id="link3">Tillie</a>]
<a class="sister" href="https://3water.com" id="link3">Tillie</a>
The Dormouse's story
The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie,
Lacie and
Tillie;
and they lived at the bottom of a well.
...

可以看出:soup 就是BeautifulSoup处理格式化后的字符串,soup.title 得到的是title标签,soup.p  得到的是文档中的第一个p标签,要想得到所有标签,得用find_all
函数。find_all 函数返回的是一个序列,可以对它进行循环,依次得到想到的东西.
get_text() 是返回文本,这个对每一个BeautifulSoup处理后的对象得到的标签都是生效的。你可以试试 print soup.p.get_text()
其实是可以获得标签的其他属性的,比如我要获得a标签的href属性的值,可以使用 print soup.a['href'],类似的其他属性,比如class也是可以这么得到的(soup.a['class'])。
特别的,一些特殊的标签,比如head标签,是可以通过soup.head 得到,其实前面也已经说了。
如何获得标签的内容数组?使用contents 属性就可以 比如使用 print soup.head.contents,就获得了head下的所有子孩子,以列表的形式返回结果,
可以使用 [num]  的形式获得 ,获得标签,使用.name 就可以。
获取标签的孩子,也可以使用children,但是不能print soup.head.children 没有返回列表,返回的是 <listiterator object at 0x108e6d150>,
不过使用list可以将其转化为列表。当然可以使用for 语句遍历里面的孩子。
关于string属性,如果超过一个标签的话,那么就会返回None,否则就返回具体的字符串print soup.title.string 就返回了 The Dormouse's story
超过一个标签的话,可以试用strings
向上查找可以用parent函数,如果查找所有的,那么可以使用parents函数
查找下一个兄弟使用next_sibling,查找上一个兄弟节点使用previous_sibling,如果是查找所有的,那么在对应的函数后面加s就可以

如何遍历树?

使用find_all 函数

find_all(name, attrs, recursive, text, limit, **kwargs)

举例说明:

print soup.find_all('title')
print soup.find_all('p','title')
print soup.find_all('a')
print soup.find_all(id="link2")
print soup.find_all(id=True)

返回值为:

[<title>The Dormouse's story</title>]
[<p class="title"><b>The Dormouse's story</b></p>]
[<a class="sister" href="https://3water.com" id="link1">Elsie</a>, <a class="sister" href="https://3water.com" id="link2">Lacie</a>, <a class="sister" href="https://3water.com" id="link3">Tillie</a>]
[<a class="sister" href="https://3water.com" id="link2">Lacie</a>]
[<a class="sister" href="https://3water.com" id="link1">Elsie</a>, <a class="sister" href="https://3water.com" id="link2">Lacie</a>, <a class="sister" href="https://3water.com" id="link3">Tillie</a>]

通过css查找,直接上例子:

print soup.find_all("a", class_="sister")
print soup.select("p.title")

通过属性进行查找

print soup.find_all("a", attrs={"class": "sister"})

通过文本进行查找

print soup.find_all(text="Elsie")
print soup.find_all(text=["Tillie", "Elsie", "Lacie"])

限制结果个数

print soup.find_all("a", limit=2)

结果为:

[<a class="sister" href="https://3water.com" id="link1">Elsie</a>, <a class="sister" href="https://3water.com" id="link2">Lacie</a>, <a class="sister" href="https://3water.com" id="link3">Tillie</a>]
[<p class="title"><b>The Dormouse's story</b></p>]
[<a class="sister" href="https://3water.com" id="link1">Elsie</a>, <a class="sister" href="https://3water.com" id="link2">Lacie</a>, <a class="sister" href="https://3water.com" id="link3">Tillie</a>]
[u'Elsie']
[u'Elsie', u'Lacie', u'Tillie']
[<a class="sister" href="https://3water.com" id="link1">Elsie</a>, <a class="sister" href="https://3water.com" id="link2">Lacie</a>]

总之,通过这些函数可以查找到想要的东西。

Python 相关文章推荐
python实现360皮肤按钮控件示例
Feb 21 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
python实现广度优先搜索过程解析
Oct 19 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python中的With语句的使用及原理
Jul 29 Python
Python 求向量的余弦值操作
Mar 04 Python
python装饰器使用方法实例
Nov 21 #Python
tornado框架blog模块分析与使用
Nov 21 #Python
python迭代器的使用方法实例
Nov 21 #Python
python生成器的使用方法
Nov 21 #Python
python单链表实现代码实例
Nov 21 #Python
python双向链表实现实例代码
Nov 21 #Python
python二叉树遍历的实现方法
Nov 21 #Python
You might like
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
php中socket通信机制实例详解
2015/01/03 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
php文件缓存方法总结
2016/03/16 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
Python字符串的常见操作实例小结
2019/04/08 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
linux 下selenium chrome使用详解
2020/04/02 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
班组长安全职责
2014/01/05 职场文书
简历的自我评价范文
2014/02/04 职场文书
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL