今天在复现百度贴吧爬虫的代码时发现出了问题,但是我看了几遍都没发现自己哪里出了问题。。。。想请各位大神帮忙看一下问题出在哪里!!!
报错是Traceback (most recent call last):
File "E:\project\bugtry\try2.py", line 43, in <module>
spider.run()
File "E:\project\bugtry\try2.py", line 31, in run
url = self.url.format(params)
AttributeError: 'tiebaspider' object has no attribute 'url'
我的代码如下
from urllib import request, parse
import time
import random
from ua_info import ua_list
class tiebaspider(object):
def __int__(self):
self.url = 'https://tieba.baidu.com/f?{}'
def get_html(self, url):
req = request.Request(url=url, headers={'User-Agent': random.choice(ua_list)})
res = request.urlopen(req)
html = res.read().decode('gbk', 'ignore')
return html
def parse_html(self):
pass
def save_file(self, filename, html):
with open(filename, 'w') as f:
f.write(html)
def run(self):
name = input('请输入查询目标:')
begin = int(input('请输入查询起始页:'))
end = int(input('请输入查询终止页:'))
for page in range(begin, end + 1):
pn = (page - 1) * 50
params = {'kw': name, 'pn': str(pn)}
params = parse.urlencode(params)
url = self.url.format(params)
html = self.get_html(url)
filename = '{}第{}页'.format(name, page)
self.save_file(filename, html)
print('第%d页抓取成功' % page)
time.sleep(random.randint(1, 2))
if __name__ == '__main__':
start = time.time()
spider = tiebaspider()
spider.run()
end = time.time()
print('执行时间:%.2f' % (end - start))
例子代码如下:
from urllib import request,parse
import time
import random
from ua_info import ua_list #使用自定义的ua池
#定义一个爬虫类
class TiebaSpider(object):
#初始化url属性
def __init__(self):
self.url='http://tieba.baidu.com/f?{}'
# 1.请求函数,得到页面,传统三步
def get_html(self,url):
req=request.Request(url=url,headers={'User-Agent':random.choice(ua_list)})
res=request.urlopen(req)
#windows会存在乱码问题,需要使用 gbk解码,并使用ignore忽略不能处理的字节
#linux不会存在上述问题,可以直接使用decode('utf-8')解码
html=res.read().decode("gbk","ignore")
return html
# 2.解析函数,此处代码暂时省略,还没介绍解析模块
def parse_html(self):
pass
# 3.保存文件函数
def save_html(self,filename,html):
with open(filename,'w') as f:
f.write(html)
# 4.入口函数
def run(self):
name=input('输入贴吧名:')
begin=int(input('输入起始页:'))
stop=int(input('输入终止页:'))
# +1 操作保证能够取到整数
for page in range(begin,stop+1):
pn=(page-1)*50
params={
'kw':name,
'pn':str(pn)
}
#拼接URL地址
params=parse.urlencode(params)
url=self.url.format(params)
#发请求
html=self.get_html(url)
#定义路径
filename='{}-{}页.html'.format(name,page)
self.save_html(filename,html)
#提示
print('第%d页抓取成功'%page)
#每爬取一个页面随机休眠1-2秒钟的时间
time.sleep(random.randint(1,2))
#以脚本的形式启动爬虫
if __name__=='__main__':
start=time.time()
spider=TiebaSpider() #实例化一个对象spider
spider.run() #调用入口函数
end=time.time()
#查看程序执行时间
print('执行时间:%.2f'%(end-start)) #爬虫执行时间