"""需求分析: 1.从 http://www.kanunu8.com/book3/6879 爬取《动物农场》所有章节的网址 2.再通过一个多线程爬虫将每一章的内容爬取下来 3.在本地创建一个“动物农场”文件夹,并将小说中的每一章分别保存到这个文件夹中""""""涉及知识点: 1.使用requests获取网页源代码 2.使用正则表达式获取内容 3.文件操作"""import re, requests, osfrom multiprocessing.dummy import Poolclass GetNovel(object): def __init__(self, url, headers): self.url = url self.headers = headers def get_toc(self): """获取每一章节的链接""" html = requests.get(self.url, headers=headers, verify=False).content.decode('gbk') toc_url_list = [] # 包含章节链接的内容 toc_block = re.findall('正文(.*?)</tbody>', html, re.S)[0] # 章节链接 toc_url = re.findall('href="(.*?)"', toc_block, re.S) for url in toc_url: toc_url_list.append(self.url + url) return toc_url_list def get_article(self, toc_url): """获取文章的标题和内容""" print(toc_url) html = requests.get(toc_url, headers=headers, verify=False).content.decode('gbk') # 文章标题 chapter_name = re.search('size="4"> (.*?)</font>', html, re.S).group(1) # 文章内容 text_block = re.search('<p>(.*?)</p>', html, re.S).group(1).replace('<br />', '') # 创建文件夹 # exist_ok:只有在目录不存在时创建目录,目录已存在时不会抛出异常 os.makedirs('动物农场', exist_ok=True) with open(os.path.join('动物农场', chapter_name +'.txt'), 'w', encoding='utf-8') as f: f.write(text_block) def save_article(self, toc_url_list): pool = Pool(5) pool.map(self.get_article, toc_url_list) def run(self): toc_url_list = self.get_toc() self.save_article(toc_url_list)if __name__ == '__main__': start_url = 'http://www.kanunu8.com/book3/6879/' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'} getnovel = GetNovel(start_url, headers) getnovel.run()"""总结: 01.os.makedirs('动物农场', exist_ok=True)---exist_ok=True只有在目录不存在时创建目录,目录已存在时不会抛出异常"""