代码拉取完成,页面将自动刷新
"""
根据输入贴吧名字爬取指定页数的网页保存到本地 已经验证
"""
from urllib import request, parse
import time
import random
from webbrowser import Mozilla
def save_html(filename, html):
"""数据存储"""
with open(filename, 'w', encoding='utf-8') as f:
f.write(html)
class BaiduTiebaSpider:
def __init__(self):
"""定义常用的变量,成员变量"""
self.url = 'http://tieba.baidu.com/f?kw={}&pn={}'
self.headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'}
def get_html(self , url):
"""获取响应内容"""
req = request.Request(url=url, headers=self.headers)
res = request.urlopen(req)
# 出现异常报错是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,因为默认就是这个参数,将其更改为ignore等即可
html = res.read().decode(encoding='utf-8', errors='ignore')
return html
def parse_html(self):
"""解析提取数据的函数"""
pass
def run(self):
"""程序入口函数"""
name = input('请输入贴吧名:')
start = int(input('请输入开始页:'))
end = int(input('请输入终止页:'))
params = parse.quote(name)
# 1、拼接URL地址
for page in range(start, end + 1):
pn = (page - 1) * 50
url = self.url.format(params, pn)
# 发送请求,解析,保存
html = self.get_html(url)
filename = 'F:/pythonPro/firstPro/downFiles/BaiduTieba/{}_第{}页.html'.format(name, page)
save_html(filename, html)
# 终端打印提示
print('第%d页抓取成功' % page)
time.sleep(random.randint(1, 3)) # 这里是为了减少频率,并且像人,频率固定也可能会被服务器识别为异常
if __name__ == '__main__':
spider = BaiduTiebaSpider()
spider.run()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。