python爬虫之BeautifulSoup 使用select方法详解


Posted in Python onOctober 23, 2017

本文介绍了python爬虫之BeautifulSoup 使用select方法详解 ,分享给大家。具体如下:

<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><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="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""

我们在写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list

(1)通过标签名查找

print soup.select('title') 
#[<title>The Dormouse's story</title>]
 
print soup.select('a')
#[<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link3">Tillie</a>]
 
print soup.select('b')
#[<b>The Dormouse's story</b>]

(2)通过类名查找

print soup.select('.sister')
#[<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link3">Tillie</a>]

(3)通过 id 名查找

print soup.select('#link1')
#[<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1"><!-- Elsie --></a>]

(4)组合查找

组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开

print soup.select('p #link1')
#[<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1"><!-- Elsie --></a>]

直接子标签查找

print soup.select("head > title")
#[<title>The Dormouse's story</title>]

(5)属性查找

查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。

print soup.select("head > title")
#[<title>The Dormouse's story</title>]
 
print soup.select('a[href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]')
#[<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1"><!-- Elsie --></a>]

同样,属性仍然可以与上述查找方式组合,不在同一节点的空格隔开,同一节点的不加空格

print soup.select('p a[href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]')
#[<a class="sister" href="http://example.com/elsie" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="link1"><!-- Elsie --></a>]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
python 将字符串转换成字典dict
Mar 24 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python lambda函数基本用法实例分析
Mar 16 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
python实现控制台打印的方法
Jan 12 Python
python 切换root 执行命令的方法
Jan 19 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
浅谈python中copy和deepcopy中的区别
Oct 23 #Python
python的构建工具setup.py的方法使用示例
Oct 23 #Python
python使用pyqt写带界面工具的示例代码
Oct 23 #Python
基于Django的python验证码(实例讲解)
Oct 23 #Python
itchat接口使用示例
Oct 23 #Python
python实现微信接口(itchat)详细介绍
Oct 23 #Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 #Python
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
mysql 全文搜索 技巧
2007/04/27 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
js实现圆盘记速表
2015/08/03 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
wxPython 入门教程
2008/10/07 Python
python 运算符 供重载参考
2009/06/11 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
基于python实现地址和经纬度转换
2020/05/19 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
俞敏洪一分钟演讲稿
2014/08/26 职场文书
2014年计生工作总结
2014/11/21 职场文书
2014会计年终工作总结
2014/12/20 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript