Python的爬虫包Beautiful Soup中用正则表达式来搜索


Posted in Python onJanuary 20, 2016

Beautiful Soup使用时,一般可以通过指定对应的name和attrs去搜索,特定的名字和属性,以找到所需要的部分的html代码。

但是,有时候,会遇到,对于要处理的内容中,其name或attr的值,有多种可能,尤其是符合某一规律,此时,就无法写成固定的值了。

所以,就可以借助正则表达式来解决此问题。
比如,

<div class="icon_col">
    <h1 class="h1user">crifan</h1>
</div>

对应的BeautifulSoup代码如下:

h1userSoup = soup.find(name="h1", attrs={"class":"h1user"});

而如果html是这种:

<div class="icon_col">
    <h1 class="h1user">crifan</h1>
    <h1 class="h1user test1">crifan 123</h1>
    <h1 class="h1user test2">crifan 456</h1>
</div>

那么想要一次性地找到所有的,符合条件的h1的部分的代码,则之前的写法,就只能找到单个的class="h1user"的部分,剩下的两个

class="h1user test1"

class="h1user test2"

就找不到了。

那么,此时,就可以用到,BeautifulSoup中非常好用的,非常强大的功能:

attrs中支持正则表达式的写法

了。

就可以写成:

h1userSoupList = soup.findAll(name="h1", attrs={"class":re.compile(r"h1user(\s\w+)?")});

就可以一次性地,找到:

class="h1user"

class="h1user test1"

class="h1user test2"

了。

<div aria-lable="xxx">
之类的标签,xxx的内容未知(可变)的前提下

想要查找到对应的此div标签,之前不知道如何实现。
如果写成:

sopu.findAll("div", attrs={"aria-lable": "xxx"});

则xxx必须写出来,如果不写出来属性值,也就没法用上attrs了,就没法实现此处查找特性属性值的标签了。
所以针对:

<div aria-label="5星, 747 份评分" class="rating" role="img" tabindex="-1">
 <div>
 <span class="rating-star">
 </span>
 <span class="rating-star">
 </span>
 <span class="rating-star">
 </span>
 <span class="rating-star">
 </span>
 <span class="rating-star">
 </span>
 </div>
 <span class="rating-count">
 747 份评分
 </span>
</div>

可以通过:

soup.findAll("div", attrs={"aria-lable": True});

去查找到属性包含aria-lable的div标签的。

所以,对于上面的,之前不知道如何处理:

用BeautifulSoup查找未知属性值,但是已知属性的名字的标签

则此处,就可以针对:

<div aria-lable="xxx">

去用:

sopu.findAll("div", attrs={"aria-lable": True});

就可以查找到对应的包含属性aria-lable的div标签了。

Python 相关文章推荐
python list语法学习(带例子)
Nov 01 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
python黑魔法之编码转换
Jan 25 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
flask-restful使用总结
Dec 04 Python
Python Cookie 读取和保存方法
Dec 28 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python中必要的名词解释
Nov 20 Python
Python同时处理多个异常的方法
Jul 28 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 #Python
Python制作爬虫抓取美女图
Jan 20 #Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 #Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 #Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 #Python
使用python实现省市三级菜单效果
Jan 20 #Python
八大排序算法的Python实现
Jan 28 #Python
You might like
php读取mysql的简单实例
2014/01/15 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
python ubplot使用方法解析
2020/01/10 Python
如何给Python代码进行加密
2020/01/10 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
《我为你骄傲》教学反思
2014/02/20 职场文书
还款承诺书范文
2014/05/20 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
单位委托函范文
2015/01/29 职场文书