你好!我注意到了你的代码中有一个小错误,这可能是导致你遇到 AttributeError: 'TbSpider' object has no attribute 'url'
错误的原因。在你的 TbSpider
类定义里,初始化方法的名称被错误地写为了 __int__
,而正确的应该是 __init__
。Python 中的初始化方法(即构造函数)是 __init__
,用于创建对象时初始化对象,你的代码中由于这个拼写错误,self.url
没有被正确定义,从而导致了属性错误。
修改后的代码如下:
from urllib import request, parse
import random
import time
class TbSpider(object):
def __init__(self): # 这里将 "__int__" 改为 "__init__"
self.url = 'https://tieba.baidu.com/f?kw={}&pn={}'
self.headers = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'}
def get_page(self, url):
req = request.Request(url=url, headers=self.headers)
res = request.urlopen(req)
html = res.read().decode()
return html
# 取数据
def parse_page(self):
pass
# 保存数据
def write_page(self, filename, html):
with open(filename, 'w') as f:
f.write(html)
# 入口函数
def run(self):
name = input('请输入贴吧名:')
start = int(input('请输入起始页:'))
end = int(input('请输入终止页:'))
kw = parse.quote(name)
for i in range(start, end+1):
pn = (i-1)*50
print(self.url)
url = self.url.format(kw, pn)
html = self.get_page(url)
filename = '{}-第{}页.html'.format(name, i)
self.write_page(filename, html)
print('第%d页抓取成功' % i)
# 休眠随机秒
time.sleep(random.randint(1, 3))
if __name__ == '__main__':
spider = TbSpider()
spider.run()
请将 __int__
更改为 __init__
后重新运行你的程序,这样应该就能正确初始化 TbSpider
类的实例,并且能够访问到 self.url
属性了。