功能:将贴吧中某个吧的1到1000页中的内容爬取下来,再以HTML的形式保存起来
运行效果:可以将已经爬取到的网站url显示,并将爬取到的内容以HTML的格式保存
练习代码:
import requests # 导入requests库
class TiebaSpider:
def __init__(self, tieba_name): # 调用初始化函数,将一些需要初始化的信息写在里面
self.tieba_name = tieba_name # 实例化贴吧的名字,让它之后能被调用
self.url_temp = "https://tieba.baidu.com/f?kw="+tieba_name+"&ie=utf-8&pn={}" # url地址的形式
self.headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 "
"Safari/537.36"} # 找一个User-Agent放进去
def get_url_list(self): # 获取url列表
'''
url_list = [] # 定义一个空列表存放即将生成的url地址
for i in range(1000): # 遍历0到1000,即生成1000个url地址
url_list.append(self.url_temp.format(i * 50)) # 自动生成简单的url地址
return url_list # 将生成的url地址列表返回
'''
return [self.url_temp.format(i*50) for i in range(1000)] # 用列表推导式写
def parse_url(self, url): # 发送请求,获取响应
print(url) # 查看获取到那个地址了
resqonse = requests.get(url, headers=self.headers) # 向浏览器进行请求
return resqonse.content.decode() # return浏览器response的内容,并解码
def save_html(self, html_str, page_num): # 保存爬取到的HTML页面的内容
file_path = "{}吧--第{}页.html".format(self.tieba_name, page_num) #
with open(file_path, 'w', encoding="utf-8") as f: # 李毅--第一页.html
f.write(html_str) # 将获取到的HTML内容写入路径
def run(self): # 实现主要逻辑
# 1.构造url列表
url_list = self.get_url_list() # 构造url列表,将即将要爬取的url放进去
# 2.遍历发送请求,获取响应
for url in url_list: # 遍历刚刚构造的url列表
html_str = self.parse_url(url) # 调用获取html页面内容的函数
# 3.保存
page_num = url_list.index(url) + 1 # 构造一个页码函数
self.save_html(html_str, page_num) # 调用保存函数,将内容保存
if __name__ == '__main__':
tieba_spider = TiebaSpider("李毅") # 创建一个贴吧爬虫对象
tieba_spider.run() # 运行爬虫类主函数