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条件和循环的使用方法
Nov 01 Python
使用Python操作Elasticsearch数据索引的教程
Apr 08 Python
Python实现线程池代码分享
Jun 21 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
python 以16进制打印输出的方法
Jul 09 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
python模块导入的细节详解
Dec 10 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
Python Celery多队列配置代码实例
Nov 22 Python
Python 装饰器原理、定义与用法详解
Dec 07 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动态创建Flash动画
2006/10/09 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
Cookie 小记
2010/04/01 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
python使用Tesseract库识别验证
2018/03/21 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
Python如何读写二进制数组数据
2020/08/01 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
广州品高软件.net笔面试题目
2012/04/18 面试题
销售工作岗位职责
2013/12/24 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
高三学生评语大全
2014/04/25 职场文书
三字经教学反思
2014/04/26 职场文书
给校长的建议书500字
2014/05/15 职场文书
七夕情人节促销方案
2014/06/07 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python