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 socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
python中pass语句用法实例分析
Apr 30 Python
Python中操作文件之write()方法的使用教程
May 25 Python
浅谈Python中的闭包
Jul 08 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
tensorflow实现简单的卷积神经网络
May 24 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
Python绘制数码晶体管日期
Feb 19 Python
关于Python OS模块常用文件/目录函数详解
Jul 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数组键值用法实例分析
2015/02/27 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
php实用代码片段整理
2016/11/12 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
JSON 数据格式详解
2017/09/13 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
详解django中Template语言
2020/02/22 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
大学总结自我鉴定
2014/01/18 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技