学习笔记-爬虫-阶段案例:小说网站爬虫开发
内容是对《Python爬虫开发:从入门到实战》的摘录、理解、代码实践和遇到的问题。
需求分析
从http://www.kanunu8.com/book3/6879爬取《动物农场》所有章节的网址,再通过一个多线程爬虫将每一章的内容爬取下来。在本地创建一个“动物农场”文件夹,并将小说中的每一章分别保存到这个文件夹中。每一章保存为一个文件
代码
import os
import multiprocessing
import requests
import lxml.html
# 获取网页源代码
start_url = 'http://www.kanunu8.com/book3/6879'
source = requests.get(start_url).content.decode('gb2312')
# 使用Xpath提取每一章地址(相对路径)
selector = lxml.html.fromstring(source)
urls = selector.xpath('//tr[@bgcolor="#ffffff"]/td/a/@href')
# 将相对路径拼接成绝对路径
url_list = []
for url in urls:
url_list.append(start_url+'/'+url)
# 使用多线程进行正文爬取
def get_content_and_save(url1):
# 得到每一章页面的源代码,并从中提取出正文部分
source1 = requests.get(url1).content.decode('gbk')
selector1 = lxml.html.fromstring(source1)
content_list = selector1.xpath('//p/text()')
# 用replace()去掉正文里混杂的多余字符’<br />‘
content = ''
for i in content_list:
content = content + i.replace('<br />', '')
# 创建.txt文件并将内容保存到里面
title = selector1.xpath('//font[@color="#dc143c"]/text()')[0]
title = title.replace(' ', '') # 去掉章节字符串中的空格,防止作为.txt文件名时出现错误
os.makedirs('动物庄园', exist_ok=True) # 创建一个名为动物庄园的文件夹用于保存内容,如果已有就不创建了
with open(os.path.join('动物庄园', title+'.txt'), 'w', encoding='utf-8') as f:
f.write(content)
# 多线程提取操作
if __name__=='__main__':
pool = multiprocessing.Pool(5) #使用5个线程同时爬取保存
pool.map(get_content_and_save, url_list)
需要注意的是,在Windows上要想使用进程模块,就必须把有关进程的代码写在if __name__ == ‘__main__’ 内,否则在Windows下使用进程模块会产生异常。Unix/Linux下则不需要。
python 进程池multiprocessing.Pool(44) - 知乎 (zhihu.com)
结果
(在项目保存路径下)
上一篇: 基于SSM的小说网站
下一篇: 国外跨境电商平台源码