python自学网络爬虫_【爬了个爬——学习Python网络爬虫】1.抓取页面

建立一个网络爬虫程序,最重要的事情就是:明确我要抓取什么,以及怎样抓取。大部分情况下,我们会希望抓取到网页中包含某些关键字的内容或者某些url,首先要实现的是对单个网页实行抓取。

我们以一个具体的应用为例:如何的得到cnblog中某个人博客中所有随笔的题目以及连接。

首先,我们要得到需要进行爬虫操作的网页地址,通过python系统库内的urllib2这个Module获得对应的HTML源码。

importurllib2

contents= urllib2.urlopen("http://www.baidu.com").read()print contents

通过上面这三句就可以将URL的源码存在content变量中,其类型为字符型。

如果打印contents,你会发现现实的内容其实就是目标网页的源代码,接下来是要从这堆HTML源码中提取我们需要的内容。

面对如此复杂的网页源代码,包含大量的标签及结构,我们需要一种更加高效方便的形式来完成数据的提取。这里,我们使用BeautifulSoup这个第三方库,完成数据清洗的工作。

1 from bs4 importBeautifulSoup2 soup=BeautifulSoup(content)3 globalsiteUrls4 siteUrls = soup.findAll('a',attrs={'class':'postTitle2'})5 print siteUrls

siteUrls显示的内容就是我们需要的信息的初步清洗结果,它提取的是html源码中class=postTitle2的标签,结果是一个list,每个元素都对应我们所求的一个url,我们可以对这个list的每个元素进行进一步的清洗,得到需要的url。

1 strip_tag_pat=re.compile('?\w+[^>]*>')2 f = file('info.txt','w')3 for i insiteUrls:4 i0 = re.sub(strip_tag_pat,' ',str(i))5 i1 = str(i).split(' ')6 #print i1

7 html = i1[2][6:-1]8 #print html + i0

9 f.write(html+i0+'\n')10 f.close()

上述代码中的第一行,

strip_tag_pat=re.compile('?\w+[^>]*>')

是利用re这个model对list中的每个元素进行去除html标签的工作,具体的re库的内容将在以后介绍,大家也可以自行参阅python官方指南。

我们将每个元素中的标签用空白符替换掉,得到的是每个url的介绍,即每一篇博文的题目,便于我们以后对所需资料的检索。

然后,我们用split()方法以间隔的空白符为界将每个元素分割成了一个单独的list,如:

['\xe3\x80\x90\xe6\xaf\x8f\xe6\x97\xa5\xe4\xb8\x80\xe9\xa2\x98\xe3\x80\x91CareerCup1.8', '\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe5\x9b\x9e\xe8\xbd\xac\xe7\x9a\x84\xe6\xa3\x80\xe9\xaa\x8c']

我们可以看到需要的html在新的List中的第二个位置,通过对list的操作我们可以得到所需的url。

完成的源代码如下:(以我自己的博客为例)

1 '''

2 Created on 2013-3-103

4 @author: gixiaochen5 '''

6 importurllib27 from bs4 importBeautifulSoup8 importre9 siteUrls = " "

10

11 url = "http://www.cnblogs.com/sayary/"

12 defgetContent(url):13 content =urllib2.urlopen(url).read()14 #print content

15

16 soup=BeautifulSoup(content)17 globalsiteUrls18 siteUrls = soup.findAll('a',attrs={'class':'postTitle2'})19 #nextUrl = soup.find('div',attrs={'class':'topicListFooter'})

20 #print siteUrls

21 #print str(nextUrl)

22 strip_tag_pat=re.compile('?\w+[^>]*>')23

24 f = file('info.txt','w')25 for i insiteUrls:26 i0 = re.sub(strip_tag_pat,' ',str(i))27 i1 = str(i).split(' ')28 printi129 html = i1[2][6:-1]30 #print html + i0

31 f.write(html+i0+'\n')32 f.close()33

34

35 getContent(url)

我们把所得到的数据保存到了一个txt文件中,当然,我们可以保存到数据库内。

然而这还不是结束,我们会发现,现在所得到的结果并不是一个人的全部随笔目录,而只是随笔列表中第一页的内容。

换言之,我们的网络爬虫仅仅抓取了某个特定网页的内容,如何得到所有的随笔列表?换一个角度来说,如何真正实现爬虫”爬“的功能,让他能够抓取到我们所需的全部信息呢?下一节我们会具体讨论网路爬虫中的各种爬取的方法,如广度优先算法等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值