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 基础学习教程
Feb 08 Python
python 查找字符串是否存在实例详解
Jan 20 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
matplotlib作图添加表格实例代码
Jan 23 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
python通过http下载文件的方法详解
Jul 26 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
Python 如何创建一个线程池
Jul 28 Python
python两个list[]相加的实现方法
Sep 23 Python
python与idea的集成的实现
Nov 20 Python
python 指定源路径来解决import问题的操作
Mar 04 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
DIY实用性框形天线
2021/03/02 无线电
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python列表对象实现原理详解
2019/07/01 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Python3并发写文件与Python对比
2019/11/20 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
会计专业毕业生求职信分享
2014/01/03 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
求职信范文大全
2014/05/26 职场文书
谢师宴答谢词
2015/01/05 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python