python爬虫(百度贴吧)求助!!!

今天在复现百度贴吧爬虫的代码时发现出了问题,但是我看了几遍都没发现自己哪里出了问题。。。。想请各位大神帮忙看一下问题出在哪里!!!

报错是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))  #爬虫执行时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值