面向过程的代码
import requests # 步骤 # 确定url地址,生成一个url列表 # 遍历url列表,请求数据 # 把返回的数据保存到本地 # https://tieba.baidu.com/f?kw=武汉&pn=0 50*0 # https://tieba.baidu.com/f?kw=武汉&pn=50 50*1 # https://tieba.baidu.com/f?kw=武汉&pn=100 50*2 # https://tieba.baidu.com/f?kw=武汉&pn=150 50*3 # https://tieba.baidu.com/f?kw=武汉&pn=200 50*4 # 自定义贴吧的名字 name = input('请输入贴吧的名字:') # url模版 url = 'https://tieba.baidu.com/f?kw={}&pn={}' # 生成url列表 url_list = [url.format(name, i * 50) for i in range(5)] print(url_list) # 定义请求头信息 把浏览器的信息拷贝过来 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"} # 遍历url_list, 得到url for item in url_list: # 请求url , 获取数据 response = requests.get(item, headers=headers) # 文件名字 file_name = '贴吧_' + name + "第{}页".format(url_list.index(item)+1)+".html" # 保存到文件 with open(file_name, 'w', encoding='utf-8') as f: f.write(response.content.decode())
封装面向对象的代码
# 1.确定url 生成url_list # 2.遍历列表,请求数据 # 3.返回数据,保存到本地 import requests class Tieba_spider(object): def __init__(self, name): # 贴吧的名字 self.name = name # 初始化贴吧的url self.url = 'https://tieba.baidu.com/f?kw=' + name + '&pn={}' # 定义请求头信息 把浏览器的信息拷贝过来 self.headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"} def get_url_list(self): """生成url列表""" url_list = [self.url.format(i * 50) for i in range(5)] return url_list def get_data_fromurl(self, url): """从服务器获取数据,并且解码返回""" # 请求url , 获取数据 这个url 是从url_list遍历得来的 response = requests.get(url, headers=self.headers) return response.content.decode() def save_html(self, html_str, num): # 文件名字 file_name = '贴吧_' + self.name + "第{}页".format(num) + ".html" # 保存到文件 with open(file_name, 'w', encoding='utf-8') as f: f.write(html_str) def run(self): pass # 1.确定url 生成url_list url_list = self.get_url_list() # 2.遍历列表,请求数据 for item_url in url_list: html_str = self.get_data_fromurl(item_url) # 3.返回数据,保存到本地 self.save_html(html_str, url_list.index(item_url) + 1) if __name__ == '__main__': # 输入 name = input('请输入贴吧名字:') # 初始化 spider = Tieba_spider(name) # 调用run方法 spider.run()