请求头:headers={‘User-Agent’:‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0’}
需求:
1、输入贴吧名称:如明星吧
2、输入起始页
3、输入终止页
4、保存到本地文件:如xxx第1页.html
实现步骤:
1、查看所抓取数据在响应内容中是否存在
右键-查看网页源码-搜索所抓取数据的关键字
2、查看并分析url地址规律
如:第一页:https://tieba.baidu.com/f?kw=%E6%98%8E%E6%98%9F%E5%90%A7&pn=0
第二页:https://tieba.baidu.com/f?kw=%E6%98%8E%E6%98%9F&ie=utf-8&pn=50
则第n页为pn=(n-1)*50
3、发送请求获取响应内容
4、保存到本地
#代码演示
import urllib.request
import urllib.parse
import time
import random
class BaiduTiebaSpider:
def __init__(self):
#定义常量
self.url='https://tieba.baidu.com/f?kw={}&pn={}'
self.headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'}
#获取响应内容
def get_html(self,url):
req=urllib.request.Request(url=url,headers=self.headers)
res=urllib.request.urlopen(req)
html=res.read().decode()
return html
#解析提取数据函数(这个例子并不使用这个函数)
def parse_html(self):
pass
#数据保存函数
def save_html(self,filename,html):
with open(filename,'w',encoding='utf-8') as f:
f.write(html)
#程序入口
def run(self):
name=input("请输入贴吧的名称:")
start=int(input("请输入起始页面:"))
end=int(input("请输入终止页面:"))
params=urllib.parse.quote(name)
#拼接url地址
for page in range(start,end+1):
pn=(page-1)*50
url=self.url.format(params,pn)
#发送响应请求
html=self.get_html(url)
filename='{}第{}页.html'.format(name,page)
# 保存页面
self.save_html(filename,html)
print("第{}页获取成功".format(page))
#控制数据抓取的时间频率,避免给网站造成高并发
time.sleep(random.randint(1,3))
if __name__ == '__main__':
spider=BaiduTiebaSpider()
spider.run()



