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中的id()函数指的什么
Oct 17 Python
Python3.6简单反射操作示例
Jun 14 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
python Zmail模块简介与使用示例
Dec 19 Python
python+selenium实现12306模拟登录的步骤
Jan 21 Python
python生成随机数、随机字符、随机字符串
Apr 06 Python
Python+tkinter实现高清图片保存
Mar 13 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制作静态网站的模板框架(一)
2006/10/09 PHP
php session 检测和注销
2009/03/16 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python async with和async for的使用
2019/06/20 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
婚纱摄影师求职信范文
2014/04/17 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
党员自我评价2015
2015/03/03 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android