BeautifulSoup中使用正则表达式re
2015-08-22 12:26
351 查看
在学习BeautifulSoup过程中,我们肯定都遇到过这种情况,我们在查找某些具有特殊格式的标签时候 头疼,举例说一下:我现在要去爬取www.baidu.com首页中的链接并且输出。在爬取的过程中你会发现,结果会把所有具有<a>标签的连接都输出来了,其中包括一些js跳转或者“/”等符号,所以我们在使用BeautifulSoup函数的时候很有必要对标签的属性进行一下筛选,这就是本文所要将的内容,篇幅小 但个人感觉还是挺方便的。
拿一个简单的链接的例子:
<a href="http://www.baidu.com" rel="baidu" >百度</a>
我们的任务是爬取a标签的href参数开头具有"http:"字符串性质的链接。
解析:
首先是导入正则表达式模块re,还有BeautifulSoup模块,urllib2。
使用urllib2模块的urlopen函数打开链接 然后使用BeautifulSoup模块将网页信息op格式化为BeautifulSoup格式的数据,利用soup对象的findAll函数查找符合正则表达式的a便签,至于深度优先这里就不再讲述。
这里的重点是在findAll函数中使用了正则表达式:
这里name来制定标签的名字,attrs来设置标签的一些参数设置,这里只拿出了href属性,并且使用re.compile(r'^http:')来对href字符串进行匹配,只有匹配成功的才能被检索。
这里的正则表达式中使用了r 不懂的可以查看博客,或者是查看正则表达式的其他应用也可以查看博客。
这里的BeautifulSoup的findAll函数没有自己讲述,有兴趣的可以查看博客。
这里没有对乱码进行处理,有兴趣的可以去查看博客。
拿一个简单的链接的例子:
<a href="http://www.baidu.com" rel="baidu" >百度</a>
我们的任务是爬取a标签的href参数开头具有"http:"字符串性质的链接。
</pre><pre name="code" class="python">import re
from bs4 import BeautifulSoup
import urllib2
url='http://www.baidu.com' op=urllib2.urlopen(url) soup=BeautifulSoup(op) a=soup.findAll(name='a',attrs={"href":re.compile(r'^http:')}) try: for i in a: op1=urllib2.urlopen(i['href']) soup1=BeautifulSoup(op1) b=soup1.findAll(name='a',attrs={"href":re.compile(r'^http:')}) for j in b: op2=urllib2.urlopen(j['href']) soup2=BeautifulSoup(op2) c=soup2.findAll(name='a',attrs={"href":re.compile(r'^http:')}) for m in c: op3=urllib2.urlopen(m['href']) soup3=BeautifulSoup(op3) d=soup3.findAll(name='a',attrs={"href":re.compile(r'^http:')}) for h in d: ii=ii+1 print h['href'] print '\n' except: print "\n"这里是我做的一个例子,作用是用来爬取百度为根节点,按照深度优先的方式 实现深度为3的爬取链接的代码。爬取了8123个链接
解析:
首先是导入正则表达式模块re,还有BeautifulSoup模块,urllib2。
使用urllib2模块的urlopen函数打开链接 然后使用BeautifulSoup模块将网页信息op格式化为BeautifulSoup格式的数据,利用soup对象的findAll函数查找符合正则表达式的a便签,至于深度优先这里就不再讲述。
这里的重点是在findAll函数中使用了正则表达式:
soup1.findAll(name='a',attrs={"href":re.compile(r'^http:')})
这里name来制定标签的名字,attrs来设置标签的一些参数设置,这里只拿出了href属性,并且使用re.compile(r'^http:')来对href字符串进行匹配,只有匹配成功的才能被检索。
这里的正则表达式中使用了r 不懂的可以查看博客,或者是查看正则表达式的其他应用也可以查看博客。
r'^http:'
这里的BeautifulSoup的findAll函数没有自己讲述,有兴趣的可以查看博客。
这里没有对乱码进行处理,有兴趣的可以去查看博客。
相关文章推荐
- actor model vs tasked based parallizm
- Android动态注册广播,监听网络状态变化,判断网络模式
- Android 开发:开源库Speex支持arm64的动态库文件
- [LeetCode#90]Subsets II
- SD3.0四个协议解读
- Android基础入门教程——4.4.1 ContentProvider初探
- 第91讲:Akka第一个案例动手实战架构设计学习笔记
- POJ 3268 Silver Cow Party(最短路 dijkstra求任意两点最短路)
- LightOJ1104---Birthday Paradox (概率)
- 如何使用UDP进行跨网段广播(转)
- 多台web服务器之间共享session
- [8-20]时间管理命令Date、Hwclock、Cal小结
- STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解
- 第3期Spark纯实战公益大讲坛:通过案例实战掌握Spark内核运行内幕
- 去掉rhel的注册提示
- HBASE bulkload 加载TSV数据
- http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/ 安卓studio 安装教程
- 微信支付公众平台配置
- 栈的应用2——超级计算器(中缀与后缀表达式)C语言
- AsyncTask小案例