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函数返回多个值的示例方法
Dec 04 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
Python中shapefile转换geojson的示例
Jan 03 Python
python的pstuil模块使用方法总结
Jul 26 Python
python检测服务器端口代码实例
Aug 31 Python
详解python中*号的用法
Oct 21 Python
Python 中判断列表是否为空的方法
Nov 24 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Python 如何定义匿名或内联函数
Aug 01 Python
Python容器类型公共方法总结
Aug 19 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
smtp邮件发送一例
2006/10/09 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
简单的项目建议书模板
2014/03/12 职场文书
个人银行贷款担保书
2014/04/01 职场文书
中学生评语大全
2014/04/18 职场文书
仓库规划计划书
2014/04/28 职场文书
奥运会口号
2014/06/13 职场文书
物流专业求职信
2014/06/30 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书