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 相关文章推荐
用pickle存储Python的原生对象方法
Apr 28 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
python多进程并发demo实例解析
Dec 13 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
python dumps和loads区别详解
Feb 04 Python
python合并多个excel文件的示例
Sep 23 Python
Opencv python 图片生成视频的方法示例
Nov 18 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开发中常用的字符串操作函数
2011/02/08 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
微信支付开发发货通知实例
2016/07/12 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
js实现抽奖效果
2017/03/27 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python实现微信机器人的方法
2019/09/06 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
客服专员岗位职责
2015/02/10 职场文书
党支部考察意见范文
2015/06/02 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
解析Java中的static关键字
2021/06/14 Java/Android
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技