BeautifulSoup基本步骤
http://blog.csdn.net/kikaylee/article/details/56841789
’BeautifulSoup是Python的一个库,最主要的功能就是从网页爬取我们需要的数据。BeautifulSoup将html解析为对象进行处理,全部页面转变为字典或者数组,相对于正则表达式的方式,可以大大简化处理过程。
0x01 安装
建议安装BeautifulSoup 4版本 利用pip进行安装:
pip install beautifulsoup4
- 1
BeautifulSoup默认支持Python的标准HTML解析库,但是它也支持一些第三方的解析库:
| 序号 | 解析库 | 使用方法 | 优势 | 劣势 |
|---|---|---|---|---|
| 1 | Python标准库 | BeautifulSoup(html,’html.parser’) | Python内置标准库;执行速度快 | 容错能力较差 |
| 2 | lxml HTML解析库 | BeautifulSoup(html,’lxml’) | 速度快;容错能力强 | 需要安装,需要C语言库 |
| 3 | lxml XML解析库 | BeautifulSoup(html,[‘lxml’,’xml’]) | 速度快;容错能力强;支持XML格式 | 需要C语言库 |
| 4 | htm5lib解析库 | BeautifulSoup(html,’htm5llib’) | 以浏览器方式解析,最好的容错性 | 速度慢 |
0x02 创建对象
导入库:
from bs4 import BeautifulSoup
- 1
创建实例:
url='http://www.baidu.com'
resp=urllib2.urlopen(url)
html=resp.read()
- 1
- 2
- 3
创建对象:
bs=BeautifulSoup(html)
- 1
- 2
格式化输出内容:
print bs.prettify()
- 1
0x03 对象种类
BeautifulSoup将复杂的html文档转换为树形结构,每一个节点都是一个对象,这些对象可以归纳为几种:
(1)Tag
Tag相当于html种的一个标签:
#提取Tag
print bs.title
print type(bs.title)
- 1
- 2
- 3
结果:
<title>百度一下,你就知道</title>
<class 'bs4.element.Tag'>
- 1
- 2
对于Tag,有几个重要的属性:
name:每个Tag对象的name就是标签本省的名称;
attrs:每个Tag对象的attrs就是一个字典,包含了标签的全部属性。
print bs.a.name
print bs.a.attrs
- 1
- 2
输出:
a
{u'href': u'/', u'id': u'result_logo', u'onmousedown': u"return c({'fm':'tab','tab':'logo'})"}
- 1
- 2
(2)NavigableString
Comment是一种特殊的NavigableString,对应的是注释的内容,但是其输出不包含注释符。看这样的一个例子:
#coding:utf-8
from bs4 import BeautifulSoup
html='''
<a class="css" href="http://example.com/test" id="test"><!--test --></a>
'''
bs=BeautifulSoup(html,"html.parser")
print bs.a
print bs.a.string
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
运行结果:
<a class="css" href="http://example.com/test" id="test"><!--def --></a>
- 1
a标签的内容是注释,但是使用.string仍然输出了。这种情况下,我们需要做下判断:
#判断是否是注释
if type(bs.a.string)==element.Comment:
print bs.a.string
- 1
- 2
- 3
再看下面的例子:
<a class="css1" href="http://example.com/cdd" id="css">abc<!--def -->gh</a>
- 1
内容是注释和字符串混合,此时可以用contents获取全部对象:
for i in bs.a.contents:
print i
- 1
- 2
如果需要忽略注释内容的话,可以利用get_text()或者.text:
print bs.a.get_text()
- 1
如果想在BeautifulSoup之外使用 NavigableString 对象,需要调用unicode()方法,将该对象转换成普通的Unicode字符串,否则就算BeautifulSoup已方法已经执行结束,该对象的输出也会带有对象的引用地址,这样会浪费内存。
0x04 搜索文档树
重点介绍下find_all()方法:
find_all( name , attrs , recursive , text , **kwargs )
- 1
(1)name参数
name参数可以查找所有名字为name的Tag,字符串对象自动忽略掉。
print bs.find_all('a')
- 1
传列表:
print bs.find_all(['a','b'])
- 1
传入正则表达式:
print bs.find_all(re.compile('^b'))
- 1
所有以b开头的标签对象都会被找到。
传递方法:
def has_class_but_not_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
print bs.find_all(has_class_but_not_id)
- 1
- 2
- 3
(2)kwyowrds关键字
print bs.find_all(id='css')
print bs.find_all(id=re.compile('^a'))
- 1
- 2
还可以混合使用:
print bs.find_all(id='css',href=re.compile('^ex'))
- 1
可以使用class作为过滤,但是class是Python中的关键字,可以使用class_代替,或者采用字典的形式传输参数:
print bs.find_all(class_='css')
print bs.find_all(attrs={'class':'css'})
- 1
- 2
(3)text参数
用来搜索文档中的字符串内容,text参数也接收字符串、正则表达式、列表、True等参数。
print bs.find_all(text=re.compile('^abc'))
- 1
(4)limit参数
限制返回对象的个数,与数据库SQL查询类似。
(5)recursive参数
调用tag的find_all()方法时,BeautifulSoup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False。
0x05 CSS选择器
可以采用CSS的语法格式来筛选元素:
#标签选择器
print bs.select('a')
#类名选择器
print bs.select('.css')
#id选择器
print bs.select('#css')
#属性选择器
print bs.select('a[class="css"]')
#遍历
for tag in bs.select('a'):
print tag.get_text()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
对于喜欢用CSS语法的人来说,这种方式非常方便。如果你仅仅需要CSS选择器的功能,那么直接使用 lxml 也可以,而且速度更快,支持更多的CSS选择器语法,但Beautiful Soup整合了CSS选择器的语法和自身方便使用API。
BeautifulSoup基本步骤的更多相关文章
- from bs4 import BeautifulSoup 引入需要安装的文件和步骤
调用beautifulsoup库时,运行后提示错误: ImportError: No module named bs4 , 意思就是没有找到bs4模块,所以解决方法就是将bs4安装上,具体步骤如下: ...
- python+urllib+beautifulSoup实现一个简单的爬虫
urllib是python3.x中提供的一系列操作的URL的库,它可以轻松的模拟用户使用浏览器访问网页. Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能 ...
- BeautifulSoup获取指定class样式的div
如何获取指定的标签的内容是解析网页爬取数据的必要手段,比如想获取<div class='xxx'> ...<div>这样的div标签,通常有三种办法, 1)用字符串查找方法,然 ...
- Ubuntu上如何安装Java,Eclipse,Pydev,Python(自带,不用装),BeautifulSoup
如何安装Java,如果出于编程的需要安装Java,需要安装的是JDK,而不仅仅是JRE,下面说说如何在Ubuntu下如何安装JDK:只有两步,1.下载并解压,2.配置环境变量1.下载并解压:下载地址: ...
- Python安装BeautifulSoup库(Windows平台下)
简介 参照官网Beautiful Soup4.4.0文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 安装步骤 1.到https:// ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- 使用BeautifulSoup和正则表达式爬取时光网不同地区top100电影并使用Matplotlib对比
还有一年多就要毕业了,不准备考研的我要着手准备找实习及工作了,所以一直没有更新. 因为Python是自学不久,发现很久不用的话以前学过的很多方法就忘了,今天打算使用简单的BeautifulSoup和一 ...
- from bs4 import BeautifulSoup 报错
一: BeautifulSoup的安装: 下载地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/4.6/ 下载后,解压缩,然后 ...
- Python爬虫html解析工具beautifulSoup在pycharm中安装及失败的解决办法
1.安装步骤: 首先,你要先进入pycharm的Project Interpreter界面,进入方法是:setting(ctrl+alt+s) ->Project Interpreter,Pro ...
随机推荐
- 【干货】国外程序员整理的 C++ 资源大全(转)
转zi:http://www.csdn.net/article/2014-10-24/2822269-c++ 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz发起和维护. 内容包括:标准 ...
- HIBERNATE知识复习记录3-关联关系
先上一张图,关于几种关系映射: 抄一段解释: 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.关联关系分为上述七 ...
- NISP视频知识点总结
身份认证访问控制安全审计本章实验 ===密码学=====古典密码 算法本身的保密性近代密码 机械密码\机电 密码打字密码机轮转机现代密码 基于密钥公钥密码 公钥==================对称 ...
- 使用CXF发布的WebService报错:org.apache.cxf.interceptor.Fault: The given SOAPAction does not match an operation
场景:JAVA语言使用CXF搭建WebService发布报错 错误信息:org.apache.cxf.interceptor.Fault: The given SOAPAction does not ...
- 软件工程导论复习 如何画系统流程图和数据流图 part2
数据流图(DFD) 数据流图,简称DFD,是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型.下 ...
- Egit的merge合并冲突具体解决方法
稍微总结下弄了半个下午的egit的merge合并冲突解决方法,网上看的都是一个模板出来的,看的糊里糊涂,花了很多时间去实验整个合并流程.. 前提工作 创建一个普通JAVA工程Test,创建一个类Tes ...
- js 触发 change 事件
首先,请各位包涵,我本人对 JS 不是很熟,不知道"触发change事件"和"触发onchange事件"哪个更加合适.有园友知道的麻烦指出,先行谢过. 起因是这 ...
- tf.Session()、tf.InteractiveSession()
tf.Session()和tf.InteractiveSession()的区别 官方tutorial是这么说的: The only difference with a regular Session ...
- day7:vcp考试
Q121. An ESXi 6.x host in the vCenter Server inventory has disconnected due to an All Paths Down (AP ...
- oracle基本查询入门(一)
一.基本select语句 SELECT *|{[DISTINCT] column|expression [alias], ...} FROM table; 例如: --查询所有数据 select * ...