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 相关文章推荐
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
python版飞机大战代码分享
Nov 20 Python
Python3.5集合及其常见运算实例详解
May 01 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
python tkinter组件使用详解
Sep 16 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
解决Keras 中加入lambda层无法正常载入模型问题
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
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python调用java的jar包方法
2018/12/15 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
采购内勤岗位职责
2013/12/10 职场文书
廉政教育心得体会
2014/01/01 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python