python BeautifulSoup
之前解析LXML,用的是XPath,现在临时被抓取写爬虫,接人家的代码,看到用的是BeautifulSoup,稍微学了下,也挺好用的,简单记录下用法,有机会做下和Xpath的对比测试
初始化
from bs4 import BeautifulSoup soup = BeautifulSoup(html,"lxml")
得到soup之后,就开始提取一些比较有用的信息,比如标题:可以直接使用
soup.title
得到的结果,是带标签的,类似这种形式:<title>title</title>,但显然我们只要里面的有效信息,当然简单粗暴的话,直接用正则表达式,拿出来也是OK的
前面API不熟,项目又催的紧,我就这么干的,现在普及下他的API
print soup.title.string
print soup.title.next
print soup.title.next_element
这些都是可以得到里面那个title的,但是注意下,string的话,对于里面有多个标签的,不太好使。类似这种:<p class="hello" id="1">hello1<strong> world</strong></p>
对于这种情况,就需要使用下strings,如下所示:
pc= soup.body.p
print pc
print pc.string
for s in pc.strings:
print s
另外要注意的一点是:直接用soup.tag的方式,是得到第一个元素的,当有多个元素同样的元素,需要提取的时候,不太好使,这时候需要使用下他的find_all函数,例如:
<html>
<title>title</title>
<body>
<p id='1' class='hello'>hello1<strong> world</strong></p>
<p id='2'>hello2
</p>
<p id='3'>hello3</p>
<p id='4'>hello4</p>
<img src="abc.jpeg"/>
<a href="http://www.baidu.com"></a>
</body>
</html>
我要提取所有的p中的元素,可以使用:
print soup.body.find_all("p")
当然,如果我只想要那个有class的p,怎么搞呢?
print soup.body.find_all("p",attrs={"class":"hello"})
依次类推,我们可以只提取id=3的p
那么问题来了,我现在想要找那个有class属性的p的id,怎么搞
很简单,找到对应的p之后,我们使用p['id']即可得到那个id对应的value了,但是要注意的是我们使用的是find_all方法,找到的p肯定是多个(虽然在我们这个例子里面只有一个),所以想说的是,给的肯定是一个集合,所以我们需要注意下这点:
p= soup.body.find_all("p",attrs={"class":"hello"})
print type(p)
print p[0]['id']
有了find_all之后,有时候,我们不需要那么多,我只要满足条件的第一个就可以,所以,很自然的就有find函数,方法差不多,直接忽略了
还有要注意的是找兄弟,和找父节点(后者用的比较少)
pc= soup.body.p # 找到他的兄弟节点,用这个 属于迭代方式
for item in pc.next_siblings:
print item.__str__().replace("\n","") #找到他的下一个兄弟
print pc.find_next_sibling() # 找父节点
print pc.parent
下面来一个终极大招,现在要找一个既有class属性又有id属性的怎么搞?
def has_class_with_id(html):
return html.has_attr('class') and html.has_attr('id') result = soup.find_all(is_right)
for item in result:
print result
再来个难点的,我需要找到class=hello并且id=1的怎么搞?
def is_right(html):
print html
print html.has_attr('class')
print html.has_attr('id')
if html.has_attr('class'):
print html['class'][0]
if html.has_attr('id'):
print html['id']
print ""
return html.has_attr('class') and html.has_attr('id') and html['class'][0]=="hello" and html['id']=="1" 注意下,class可能含多个,所以它也是一个集合
python BeautifulSoup的更多相关文章
- 【转】Python BeautifulSoup 中文乱码解决方法
这篇文章主要介绍了Python BeautifulSoup中文乱码问题的2种解决方法,需要的朋友可以参考下 解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输 ...
- Python -- BeautifulSoup的学习使用
BeautifulSoup4.3 的使用 下载和安装 # 下载 http://www.crummy.com/software/BeautifulSoup/bs4/download/ # 解压后 使用r ...
- Python beautifulsoup模块
BeautifulSoup中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ BeautifulSoup下载:http://w ...
- Python - BeautifulSoup 安装
BeautifulSoup 3.x 1. 下载 BeautifulSoup. [huey@huey-K42JE python]$ wget http://www.crummy.com/software ...
- Python BeautifulSoup中文乱码问题的2种解决方法
解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家首先是代码 from bs4 import Beautif ...
- python BeautifulSoup库的基本使用
Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以 ...
- python BeautifulSoup的简单使用
官网:https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 参考:https://www.cnblogs.com/yupeng/p/336203 ...
- python BeautifulSoup 介绍--安装
Python中,专门用于HTML/XML解析的库: 特点是: 即使是有bug,有问题的html代码,也可以解析. BeautifulSoup主要有两个版本 BeautifulSoup 3 之前的,比较 ...
- python BeautifulSoup库用法总结
1. Beautiful Soup 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...
- python beautifulsoup/xpath/re详解
自己在看python处理数据的方法,发现一篇介绍比较详细的文章 转自:http://blog.csdn.net/lingojames/article/details/72835972 20170531 ...
随机推荐
- Docker GitHub 网站中 Readme.md 以技术者的角度翻译
Docker 是一个开源的轻量级容器项目,用于让你的应用在它上面打包.集装和运行.Docker 运行的环境既包含未知硬件也包含未知操作系统.这句话的意思是它可以运行在任何地方,小到你的笔记本大到一个大 ...
- 重置Oracle配置
经常被ORACLE坑,作为一个只需要开发时候连连ORACLE的程序员,在经历了一次又一次的折腾之后,决定还是把这些琐碎的事情写下来. 经常在虚拟机中使用ORACLE,ORACLE的网络配置有一些变化就 ...
- winform 记事本 剪切 粘贴 全选 撤销
private void 撤消UToolStripMenuItem_Click(object sender, EventArgs e) { textBox1.Undo(); } private voi ...
- docker-compose 部署 MySql
信息: Docker版本($ docker --version):Docker版本18.03.1-ce,版本9ee9f40 系统信息:Windows10专业版 mysql挂载在Docker的volum ...
- 第二个Sprint冲刺第五天(燃尽图)
- 英语学习/词典App分析-团队作业(五)
英语学习/词典APP排行五排名: 1.网易有道词典(单词查询翻译类软件). 2.百词斩(单词记忆类软件). 3.沪江开心词场. 4.金山词霸. 5.流利说英语(英语口语APP). 个软件的分析: 1. ...
- Alpha冲刺-第三天
1.1 今日完成任务情况以及遇到的问题. 完成任务情况 杜世康:使用正则表达式对于弹幕文本中的数字,字母,符号,非法字符等过滤. 刘丹,李玉莹:实现主播管理功能 曹莹雯,尹楠: 调用NLPIR/ICT ...
- CentOS7 如何修改 内核版本
1. 参考blog http://www.mamicode.com/info-detail-1758066.html https://www.cnblogs.com/sexiaoshuai/p/839 ...
- spring 事务传播 never 当一个业务方法设置为never时候表示 不会加入任何事务中
- 【bzoj4771】七彩树 树链的并+STL-set+DFS序+可持久化线段树
题目描述 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色.定义 ...