加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

BeautifulSoup中使用正则表达式re

发布时间:2020-12-14 01:01:14 所属栏目:百科 来源:网络整理
导读:在学习 BeautifulSoup 过程中,我们肯定都遇到过这种情况,我们在查找某些具有特殊格式的标签时候 头疼,举例说一下:我现在要去爬取www.baidu.com首页中的链接并且输出。在爬取的过程中你会发现,结果会把所有具有a标签的连接都输出来了,其中包括一些js跳

在学习BeautifulSoup过程中,我们肯定都遇到过这种情况,我们在查找某些具有特殊格式的标签时候 头疼,举例说一下:我现在要去爬取www.baidu.com首页中的链接并且输出。在爬取的过程中你会发现,结果会把所有具有<a>标签的连接都输出来了,其中包括一些js跳转或者“/”等符号,所以我们在使用BeautifulSoup函数的时候很有必要对标签的属性进行一下筛选,这就是本文所要将的内容,篇幅小 但个人感觉还是挺方便的。


拿一个简单的链接的例子:

<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函数没有自己讲述,有兴趣的可以查看博客。

这里没有对乱码进行处理,有兴趣的可以去查看博客。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读