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遍历指定文件及文件夹的方法
May 09 Python
Python操作Word批量生成文章的方法
Jul 28 Python
python抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
python实现贪吃蛇游戏源码
Mar 21 Python
Python虚拟环境venv用法详解
May 25 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python更改pip镜像源的方法示例
Dec 01 Python
pandas中pd.groupby()的用法详解
Jun 16 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
十天学会php之第九天
2006/10/09 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
ThinkPHP分页实例
2014/10/15 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
jQuery中:radio选择器用法实例
2015/01/03 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
用Python编写简单的微博爬虫
2016/03/04 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
关于python多重赋值的小问题
2019/04/17 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python configparser模块应用过程解析
2020/08/14 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
C++的几个面试题附答案
2016/08/03 面试题
员工培训邀请函
2014/02/02 职场文书
森林防火宣传标语
2014/06/27 职场文书
报到证办理个人委托书
2014/10/06 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python