本案例是演示用python爬取贴吧指定页码的页面并保存到文件,适合初学者爬虫练手。
在清楚了需求的基础上,首先我们要清楚实现步骤,大概可以分为三步:
1、分析需要爬取的网址,找出不同页码的url之间的规律(这步很关键):
通过分析发现不同的页码的url类似,只是参数pn发生了改变,分析得:pn = (i-1)*50(i是当前页码数,如果是第1页,i就是1,pn就是0,以此类推……)
2、发送请求,获取到访问不同页码的url页面的响应数据;
3、将响应的页面对象保存到文件中。
python代码如下:
#获取百度某贴吧指定范围页码的页面
import urllib.request
import urllib.parse
def loadPage(url):
'作用:根据url发送请求,获取服务器响应文件'
'url:需要爬取的url地址'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
request = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(request)
return response.read()
def writePage(html,filename):
'作用:将html写入文件'
with open(filename,'wb') as f:
f.write(html)
def tiebaSpider():
'''
作用:获取页面
url:需要爬去的url
startpage:起始页码
endpage:截止页码
'''
url = 'http://tieba.baidu.com/f?'
word = input('输入你要获取的贴吧名:')
startpage = input('请输入起始页码:')
endpage = input('请输入结束页码:')
for i in range(int(startpage),int(endpage)+1):
pn = (i-1)*50
params = {'kw':word,'pn':pn}
url = url + urllib.parse.urlencode(params)
print('正在下载第'+str(i)+'页')
html = loadPage(url)
filename = '第'+str(i)+'个.html'
print('正在保存第'+str(i)+'页')
writePage(html,filename)
if __name__ == '__main__':
tiebaSpider()
运行结果如下:
保存的文件如下: