Python爬虫之简单的爬取百度贴吧数据
程序员文章站
2023-01-22 17:49:52
首先要使用的第类库有 urllib下的request 以及urllib下的parse 以及 time包 random包 之后我们定义一个名叫BaiduSpider类用来爬取信息 属性有 url:用来爬取的网址 headers:请求头 之后我们定义三个方法 不涉及清洗数据 获取页面 保存数据 主函数 ......
首先要使用的第类库有 urllib下的request 以及urllib下的parse 以及 time包 random包
之后我们定义一个名叫baiduspider类用来爬取信息
属性有 url:用来爬取的网址 headers:请求头
class baiduspider(object): def __init__(self): self.url = 'http://tieba.baidu.com/f?kw={}&pn={}' self.headers = {'user-agent':'win7:mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.1 (khtml, like gecko) chrome/14.0.835.163 safari/535.1'}
之后我们定义三个方法 不涉及清洗数据
获取页面
1 #获取页面 2 def get_page(self,url): 3 #定义请求对象 4 req = request.request(url=url,headers=self.headers) 5 #发起请求 6 res = request.urlopen(req) 7 #获取相应对象 8 html = res.read().decode('utf-8', 'ignore') 9 return html
保存数据
#保存数据 def write_page(self,filename,html): #将数据保存到本地 with open(filename,'w',encoding='utf-8') as f: f.write(html)
主函数
#主函数 def main(self): name = input('请输入贴吧名:>>>>') start = int(input('请输入起始页')) end = int(input('请输入终止页')) for page in range(start,end+1): #拼接url地址 'http://tieba.baidu.com/f?kw{}&pn={}' #进行编码 将中文字符编码为url地址编码 kw = parse.quote(name) #获取当前页数 pn = (page-1)*50 #进行url地址的拼接 url = self.url.format(kw,pn) #获取相应 html = self.get_page(url) filename = '{}-第{}页.html'.format(name,page) self.write_page(filename,html) #提示 print('第{}页爬取成功'.format(page)) #控制爬取速度 time.sleep(random.randint(1,3))
最后 所有的代码展示如下
#导入模块 from urllib import request,parse import time import random class baiduspider(object): def __init__(self): self.url = 'http://tieba.baidu.com/f?kw={}&pn={}' self.headers = {'user-agent':'win7:mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.1 (khtml, like gecko) chrome/14.0.835.163 safari/535.1'} #获取页面 def get_page(self,url): #定义请求对象 req = request.request(url=url,headers=self.headers) #发起请求 res = request.urlopen(req) #获取相应对象 html = res.read().decode('utf-8', 'ignore') return html #解析数据 def parse_page(self): pass #保存数据 def write_page(self,filename,html): #将数据保存到本地 with open(filename,'w',encoding='utf-8') as f: f.write(html) #主函数 def main(self): name = input('请输入贴吧名:>>>>') start = int(input('请输入起始页')) end = int(input('请输入终止页')) for page in range(start,end+1): #拼接url地址 'http://tieba.baidu.com/f?kw{}&pn={}' #进行编码 将中文字符编码为url地址编码 kw = parse.quote(name) #获取当前页数 pn = (page-1)*50 #进行url地址的拼接 url = self.url.format(kw,pn) #获取相应 html = self.get_page(url) filename = '{}-第{}页.html'.format(name,page) self.write_page(filename,html) #提示 print('第{}页爬取成功'.format(page)) #控制爬取速度 time.sleep(random.randint(1,3)) if __name__ == '__main__': spider = baiduspider() spider.main()
一个非常非常简单的爬虫就完成了 让我们看一下运行效果截图:
html文件打开后 与我们正常打开的网页并没有太大的差别