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 相关文章推荐
利用django如何解析用户上传的excel文件
Jul 24 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Python中交换两个元素的实现方法
Jun 29 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
详解Django 时间与时区设置问题
Jul 23 Python
解决Mac下使用python的坑
Aug 13 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
Python logging模块写入中文出现乱码
May 21 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Pytorch 中的optimizer使用说明
Mar 03 Python
python数字图像处理之图像自动阈值分割示例
Jun 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常用正则表达式集锦
2014/08/17 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
Django学习笔记之为Model添加Action
2019/04/30 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
会计辞职信范文
2014/01/15 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
Python类方法总结讲解
2021/07/26 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server