以《龙族5》为例,该小说网站每个章节都被拆分为2页,链接形式 https://www. 无法查看第2页内容,而使用 https://m. 链接形式可以查看第2页内容
查看网页源代码,获取网页的章节名、正文、下一页/章链接
<div class="nr_title" id="nr_title">
第2章 全民公敌 1(第1/2页)
</div>
这是地狱中的魔王们相互撕咬。
<br>
<br>
铁剑和利爪撕裂空气,留下霜冻和火焰的痕迹,血液刚刚飞溅出来,就被高温化作血红色的蒸汽,冲击波在长长的走廊上来来去去,早已没有完整的玻璃,连这座建筑物都摇摇欲坠。
<br>
<a id="pb_next" href="/211217/74583837_2.html ">下一页</a>
可使用python parsel模块获取网页文字数据,css选择器(copy selector)获取内容
import requests
import parsel # 网页提取文字xpath、re、css
from unicodedata import normalize # normalize方法将Unicode字符转换为正常字符
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Edg/83.0.478.45'}
def paper_download(url):
"""
适用网站:https://m.rsilu.com
"""
response = requests.get(url=url, headers=headers)
selector = parsel.Selector(response.text.encode('iso-8859-1').decode('gbk', 'ignore'))
title = selector.css('#nr_title::text').extract_first() # 章节名
title = title.strip() # 去除头尾空字符
content = selector.css('#nr1::text').getall() # 正文内容
next_url = selector.css('#pb_next::attr(href)').extract_first() # 下页链接
next_url = next_url.strip()
text = ''
for i in content:
text += i.strip() + '\n'
text = normalize('NFKC', text) # 将Unicode字符转换为正常字符
return title, text, next_url
def paper_save(filepath, start_url, end_url):
"""
适用网站:https://m.rsilu.com
:param str filepath: 小说文件保存完整路径
:param str start_url: 小说开始下载页链接
:param str end_url: 小说正文的结束页/最后一页链接
"""
base_url = r'https://m.rsilu.com'
now_url = start_url
while True:
url = base_url + now_url
pd = paper_download(url)
with open(filepath, 'a', encoding='gbk') as f: # 同上面编码是gbk
f.write(pd[0]) # 章节名
f.write(pd[1]) # 正文内容首行自带空行
#break # 单次测试
if now_url != end_url:
now_url = pd[2]
else:
print('下载失败:{}< 或 >最后一章下载完成'.format(now_url))
break
if __name__ == '__main__':
filename = r'E:\测试\txt\龙族5.txt'
start_url = r'/211217/74583837.html'
end_url = r'/211217/74584433.html'
paper_save(filename, start_url, end_url)