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将多个文本文件合并为一个文本的代码(便于搜索)
Mar 13 Python
python实现bitmap数据结构详解
Feb 17 Python
python实现堆栈与队列的方法
Jan 15 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
Python脚本完成post接口测试的实例
Dec 17 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
深入了解python中元类的相关知识
Aug 29 Python
Django REST 异常处理详解
Jul 15 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
python把一个字符串切开的实例方法
Sep 27 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
如何在Python中创建二叉树
Mar 30 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中使用XML
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/10/09 PHP
聊天室php&amp;mysql(二)
2006/10/09 PHP
教你如何把一篇文章按要求分段
2006/10/09 PHP
php printf输出格式使用说明
2010/12/05 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
Python连接DB2数据库
2016/08/27 Python
Python socket实现简单聊天室
2018/04/01 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
民主评议党员自我评价材料
2014/09/18 职场文书
公司表扬信格式
2015/05/04 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle