哈喽,哈喽~都说手机自带的浏览器是看小说最好的一个APP,不须要下载任何软件,直接百度就ok了。
但是小编还是想说,如果没有网,度娘还是度娘吗?能把小说下载成一个.txt文件看不是更香吗?这能难倒小编吗?坚决不能滴。于是乎,自己动手丰衣足食,Python就是万能的好吧。
程序语言:python
第三方库:requests,parsel
数据解析方式:css/xpath
爬取网站:笔趣阁(以天蚕土豆的《斗破苍穹》为例)
# 导入第三方库
import requests
import parsel
# 定义请求头
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
# 封装函数:下载小说一章节
def one_chapter(url):
# 调用第三方库requests发送请求,模拟浏览器访问
response = requests.get(url, headers=headers)
# 网页响应后根据网页文字内容自动转码为utf-8格式
response.encoding = response.apparent_encoding
# 响应数据转换为可视的网页文本信息
html = response.text
# 调用第三方库parsel,将网页文本信息转换为可被css/xpath提取的内容
selector = parsel.Selector(html)
# 第一种方式:css
# 通过css选择器定位并提取小说章节标题
h_1=selector.css('#wrapper > div.content_read > div > div.bookname > h1::text').get()
# 通过css选择器定位并提取小说章节内容(以列表形式存放)
content_1=selector.css('#content::text').getall()
# 第二种方式:xpath
# 通过xpath定位并提取小说章节标题
# h_2=selector.xpath('//h1/text()').get()
# 通过xpath定位并提取小说章节内容(以列表形式存放)
# content_2=selector.xpath('//*[@id="content"]/text()').getall()
# 定义空列表存放小说章节内容
lines=[]
# 创建for循环,遍历列表content_1,通过python内置函数strip去除小说章节内容前后的空格或空行
for i in content_1:
lines.append(i.strip())
# 通过函数join拼接小说章节内容,拼接的列表内容以换行的形式显示
text='\n'.join(lines)
# 下载保存小说
# 定位小说保存的路径
file=open(r'D:\Python\project\项目\斗破\{}.txt'.format(h_1),mode='a',encoding='utf-8')
# 写入小说章节标题并换行
file.write(h_1+'\n\n')
# 写入小说章节内容
file.write(text)
file.close()
# 主函数
if __name__ == '__main__':
# 《斗破苍穹》小说网页链接
index_url='https://www.xbiquge.la/7/7877/'
# 发送请求,获取网页响应
index_response=requests.get(index_url,headers=headers)
# 网页响应后根据网页文字内容自动转码为utf-8格式
index_response.encoding=index_response.apparent_encoding
# 调用第三方库parsel,将网页文本信息转换为可被css/xpath提取的内容
total_selector=parsel.Selector(index_response.text)
# 通过css选择器定位并提取小说各章节网页链接
urls=total_selector.css('#list > dl > dd a::attr(href)').getall()
# 调用封装的函数one_chapter,传入小说各章节链接以下载整部小说
for url in urls:
one_chapter('https://www.xbiquge.la'+url)
大家喜欢的记得点点赞,对源码感兴趣的可以私信我哟!
点击这行字体也行哦!