今天进一步学习了python网络爬虫的知识,学会了写一个简单的爬虫程序,用于爬取百度贴吧的网页并保存为HTML文件。下面对我在实现这个功能时的代码以及所遇到的问题的记录总结和反思。
首先分析实现这个功能的具体思路:
通过对贴吧URL的观察,可以看出贴吧中的帖子的URL有这样一个特征,以“http://tieba.baidu.com/p/4463392102?pn=3”这个URL为例,它由“http://tieba.baidu.com/p/4463392102?”和“pn=3”组成,其中,前半部分为帖子第一页的URL,而“pn=”则决定了第几页(比如pn=3位第三页)。通过这样的分析我们大致可以获得这样的思路:
1.通过用户输入确定URL的前半部分,起始页码和终止页码
2.通过循环实现对要保存文件的命名,下载进度显示等功能的实现
3.将解析到的HTML文档写入我们之前创建的文件之中
4.关闭文件,程序结束
代码如下:
# -*- coding: utf-8 -*-
#---------------------------------------
# 程序:百度贴吧爬虫
# 版本:0.1
# 作者:Kelvin
# 日期:2016-05-21
# 语言:Python 2.7
# 操作:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数。
# 功能:下载对应页码内的所有页面并存储为html文件。
#---------------------------------------
import urllib2,string
#定义贴吧爬虫函数
def tieba(url,start,end):
#从start到end+1进行循环
for i in range(start,end+1):
fName=string.zfill(i,5)+'.html'#将文件命名为六位的带有序号的html文件
print '正在下载第'+str(i)+'个文件,并将其转存为'+fName
file=open(fName,'w+')
#获取内容并进行解析
response=urllib2.urlopen(url+str(i)).read()
#写入文件
file.write(response)
#关闭文件
file.close()
#--------------------------------------------------
#获取用户输入
bdurl=str(raw_input(u'请输入帖子的URL,不包含pn之后的数字\n'))
start=int(raw_input(u'请输入起始页码\n'))
end=int(raw_input(u'请输入终止页码\n'))
#调用函数
tieba(bdurl,start,end)