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之眼花缭乱的运算符
Sep 14 Python
Python httplib模块使用实例
Apr 11 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python实现多线程的两种方式分析
Aug 29 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
pytorch显存一直变大的解决方案
Apr 08 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判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
电气技术员岗位职责
2013/11/19 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
社区综治工作汇报
2014/10/27 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
企业宣传稿范文
2015/07/23 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
Python使用pyecharts控件绘制图表
2022/06/05 Python