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 MD5文件生成码
Jan 12 Python
Python使用urllib2获取网络资源实例讲解
Dec 02 Python
跟老齐学Python之集成开发环境(IDE)
Sep 12 Python
从Python的源码来解析Python下的freeblock
May 11 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
用python打印菱形的实操方法和代码
Jun 25 Python
Python列表的切片实例讲解
Aug 20 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
基于python实现雪花算法过程详解
Nov 16 Python
Python递归实现打印多重列表代码
Feb 27 Python
用Python将GIF动图分解成多张静态图片
Jun 11 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
javascript中常用编程知识
2013/04/08 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python读取word文本操作详解
2018/01/22 Python
python使用插值法画出平滑曲线
2018/12/15 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
thinkphp5 路由分发原理
2021/03/18 PHP
Otel.com:折扣酒店预订
2017/08/24 全球购物
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
视图的作用
2014/12/19 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
单位在职证明范本
2014/01/09 职场文书
关于工资低的辞职信
2014/01/14 职场文书
战略合作协议书范本
2014/04/18 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
优秀教师单行材料
2014/12/16 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python