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 BeautifulSoup使用方法详解
Nov 21 Python
Python合并字符串的3种方法
May 21 Python
python中的编码知识整理汇总
Jan 26 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
python写入并获取剪切板内容的实例
May 31 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
python文件与路径操作神器 pathlib
Apr 01 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文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
php数组分页实现方法
2016/04/30 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
python查看模块安装位置的方法
2018/10/16 Python
利用python修改json文件的value方法
2018/12/31 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
Java面试笔试题大全
2016/11/23 面试题
有针对性的求职自荐信
2013/11/14 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书