BeautifulSoup库
'''灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便的实现网页信息的提取。'''
BeautifulSoup库包含的一些解析库:
解析库 使用方法 优势 劣势
python标准库 BeautifulSoup(markup,"html.parser") python内置标准库、执行速度适中、文档容错能力强 python 2.7.0 or 3.2.2前的版本中文容错能力差
lxml HTML解析库 BeautifulSoup(markup,"lxml") 速度快、文档容错能力强 需要安装C语言库
lxml XML解析库 BeautifulSuop(markup,"xml") 速度快、唯一支持XML的解析库 需要安装C语言库
html5lib BeautifulSoup(markup,"html5lib") 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 速度慢、不依赖外部扩展
'''基本使用'''
html = '''
<html lang="zh-cn">
<head>
<title>翱游 - 博客园</title>
</head>
<body>
<p class="tab" name="morning">
good night
<a name="top" href="http://www.123.com">
<span>wisir</span>
</a>
<a href="hello.cn">hh</a>
<a href="man.cn">man</a>
</p>
<p class="cp" name="dromouse">hello,world</p>
<p>...</p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,"lxml")
print(soup.prettify()) #自动格式化输出与补全代码 '''标签选择器'''
print("-标签选择器-"*20)
#选择元素:返回匹配的第一个元素
print(type(soup.title),soup.title)
print(soup.p)
#获取名称
print(soup.title.name)
#获取属性
print(soup.p.attrs['name'])
print(soup.p['name'])
#获取内容
print(soup.title.string)
#嵌套选择
print(soup.head.title.string)
#子节点和子孙节点
print(soup.p.contents) #返回以子节点为元素的列表
print(soup.p.children) #.children得到的是一个迭代器对象,.contents得到的是一个列表
for i,child in enumerate(soup.p.children):
print(i,child)
print(soup.p.descendants) #.descendants获取所有的子孙节点
for i,child in enumerate(soup.p.descendants):
print(i,child)
#父节点和祖先结点
print(soup.a.parent) #输出父节点
print(list(enumerate(soup.a.parents))) #输出祖先结点,层层向上
#兄弟节点
print(list(enumerate(soup.a.next_siblings))) #输出所有的后兄弟节点
print(list(enumerate(soup.a.previous_siblings))) #输出所有的前兄弟节点
'''find_all(name,attrs,recursive,text,**kwargs):可根据标签名、属性、内容查找文档'''
print("-find_all-"*20)
html = '''
<div class="panel">
<div class="panel-heading">
<h4>Hello</h4>
</div>
<div class="panel-body">
<ul class="list" id="list-1" name="element">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>
</div>
'''
soup = BeautifulSoup(html,"lxml")
#name
print(soup.find_all('ul'))
print(type(soup.find_all("ul")[0]))
#attrs
print(soup.find_all(attrs={"id":"list-1"}))
print(soup.find_all(attrs={"name":"element"}))
#text
print(soup.find_all(text="Foo")) '''find(name,attrs,recursive,text,**kwargs):返回find_all方法的第一个元素'''
print(soup.find("ul")) '''
find_parents()与find_parents
find_next_siblings()与find_next_sibling()
find_previous_siblings()与find_previous_sibling()
find_all_next()与find_next()
find_all_previous()和find_previous()
同find_all()与find()
''' '''CSS选择器'''
print("-CSS选择器-"*20)
#通过select直接传入CSS选择器即可完成选择,返回符合要求的所有结果为元素的列表
print(soup.select('.panel .panel-heading')) #类选择器前加.,层级选择器之间加空格
print(soup.select('ul li'))
print(soup.select('#list-2 .element'))
print(type(soup.select('ul')[0]))
#获取属性
for ul in soup.select('ul'):
print(ul['id'])
print(ul.attrs['id'])
#获取内容
for li in soup.select('li'):
print(li.get_text()) '''
总结:
推荐使用lxml解析库,必要时使用html.parser
标签选择筛选功能弱但是速度快
建议使用find()、find_all()查询匹配单个结果或多个结果
如果对CSS选择器熟悉建议使用select()
记住常用的获取属性和文本值的方法
'''
BeautifulSoup库的更多相关文章
- Python爬虫小白入门(三)BeautifulSoup库
# 一.前言 *** 上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据.这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据. ...
- BeautifulSoup库children(),descendants()方法的使用
BeautifulSoup库children(),descendants()方法的使用 示例网站:http://www.pythonscraping.com/pages/page3.html 网站内容 ...
- 网络爬虫BeautifulSoup库的使用
使用BeautifulSoup库提取HTML页面信息 #!/usr/bin/python3 import requests from bs4 import BeautifulSoup url='htt ...
- BeautifulSoup库的使用
1.简介 BeautifulSoup库也是一个HTML/XML的解析器,其使用起来很简单,但是其实解析网站用xpath和re已经足矣,这个库其实很少用到.因为其占用内存资源还是比xpath更高. '' ...
- python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化
实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件和excel文件. 实 ...
- python下载安装BeautifulSoup库
python下载安装BeautifulSoup库 1.下载https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/ 2.解压到解压 ...
- 基于BeautifulSoup库的HTML内容的查找
一.BeautifulSoup库提供了一个检索的参数: <>.find_all(name,attrs,recursive,string,**kwargs),它返回一个列表类型,存储查找的结 ...
- python BeautifulSoup库的基本使用
Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以 ...
- python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法
最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的<python网络爬虫与信息提取>,是由北京理工的副教授嵩天老 ...
随机推荐
- c/c++ 浅拷贝
c/c++ 浅拷贝 编译器合成的拷贝构造函数和=重载函数,只是做如下处理: 对象1.成员变量a = 对象2.成员变量a 如果成员变量a是指针,执行完拷贝构造函数或者*=重载函数**后,对象1和对象2的 ...
- python创建列表和向列表添加元素方法
今天的学习内容是python中的列表的相关内容. 一.创建列表 1.创建一个普通列表 >>> tabulation1 = ['大圣','天蓬','卷帘'] >>> ...
- C++实现第三方资源释放与载入过程(以DLL为例)
简介 我们经常看见有一些程序开始执行时会释放一些文件,以便于后续操作.例如一些病毒为了便于传播和隐藏,经常把一些需要用的动态库或是驱动文件打包进一个可执行文件中,再由需要使用的时候,再临时释放和加载. ...
- Ubuntu教程
Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音.了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:) 大多数的美国人读 ubun ...
- Win 10 和 Linux 双系统,从硬盘删除Linux分区,Win 10引导修复
由于安装双系统后,Linux 用的比较少.因此,从Win 10 磁盘管理中删除了linux 占用的磁盘空间,重启后无法进入win 10 ,出现如下情况: 有人提出,此时需要重装系统,并不用如此麻烦,通 ...
- 力扣算法题—050计算pow(x, n)
#include "000库函数.h" //使用折半算法 牛逼算法 class Solution { public: double myPow(double x, int n) { ...
- axios超时timeout拦截
应用场景: 在网络请求中,可能不可避免的会遇到网络差或者请求超时的情况,这时候,如果你采用的技术是axios,那就可以通过设置拦截器捕获这个异常情况,并做出下一步处理. 代码实践: ① 设置拦截器,返 ...
- UEditor学习笔记1
首先对于前段时间遇到的一些总结做下记录: 0 == '' => true transition,渐变属性,其值可以是某属性,也可以是all,如transition: all 0.3s:鼠标放到 ...
- python nt, bool, str 试题
# 1.有变量量name = "aleX leNb" 完成如下操作:name = "aleX leNb"# 1)移除 name 变量对应的值两边的空格,并输出处 ...
- C#编程の模板
C#泛型编程已经深入人心了.为什么又提出C#模板编程呢?因为C#泛型存在一些局限性,突破这些局限性,需要使用C#方式的模板编程.由于C#语法.编译器.IDE限制,C#模板编程没有C++模板编程使用方便 ...