利用Python下载网络小说并保存到本地文件!
利用Python下载网络小说并保存到本地文件!
原创:大雄Obear
最近在都应中刷到一本B站的漫画《我家娘子竟然是女帝》,它是根据小说《迎娶女帝之后》改编的,它目前只更新到68集,这本小说虽然不是我喜欢的类型,但是没啥事就看了一下,但是后面章节怎么找都找不到下载,于是用python把整本说下载下来了。
安装python
官方下载地址:https://www.python.org/downloads/
![006fRELkly4h77395emh7j31hb0i8dm3 006fRELkly4h77395emh7j31hb0i8dm3](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
![006fRELkly4h77397jz7qj31h50fz413 006fRELkly4h77397jz7qj31h50fz413](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
windows版本的安装比较简单,直接下载后,安装即可。
网站分析
获取小说目录
小说地址:https://www.81zw.com/book/60503/
![006fRELkly4h773991mvoj30q20j4n0i 006fRELkly4h773991mvoj30q20j4n0i](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
就以第一张为例,点开链接,检查网页,找到这本小说所有章节的链接和名称。
![006fRELkly4h773a1ne2mj314p0gt76p 006fRELkly4h773a1ne2mj314p0gt76p](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
章节目录,通过一个 id 为 list 的 div 包裹,使用 dl > dd 制作列表
def get_urls():
url = bookurl
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
html = etree.HTML(response.text)
# 所有章节的url列表
url_list = [weburl + x for x in html.xpath('//div[@id="list"]/dl/dd/a/@href')]
return url_list
以上代码,通过 etree 获取 HTML 内容,然后通过 xpath 查询 id 为 list 中每个章节的链接
获取小说内容
![006fRELkly1h773b67f32j311y0eggz3 006fRELkly1h773b67f32j311y0eggz3](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
标题内容在 class 为 bookname 的div 下面的 H1 标签中。
小说内容在 id 为 content 的 div 中。
def get_text(url):
rep = requests.get(url, headers=headers)
rep.encoding = 'utf-8'
dom = etree.HTML(rep.text)
name = dom.xpath('//div[@class="bookname"]/h1/text()')[0]
text = dom.xpath('//div[@id="content"]/text()')
with open(path + bookname + '.txt', 'a', encoding='utf-8') as f:
f.write(name)
for con in text:
f.write(con)
print(f'{name} ===> 下载完成')
使用 etree 和 xpath 获取小说内容,然后通过 for 循环写入文件。
完整代码
import requests
from lxml import etree
import time
import random
path = r"D:/Download/books/"
bookname = "迎娶女帝之后"
weburl = "https://www.81zw.com/"
bookurl = "https://www.81zw.com/book/60503/"
headers = {
"Referer": bookurl,
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"
}
def get_urls():
url = bookurl
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
html = etree.HTML(response.text)
# 所有章节的url列表
url_list = [weburl + x for x in html.xpath('//div[@id="list"]/dl/dd/a/@href')]
return url_list
def get_text(url):
rep = requests.get(url, headers=headers)
rep.encoding = 'utf-8'
dom = etree.HTML(rep.text)
name = dom.xpath('//div[@class="bookname"]/h1/text()')[0]
text = dom.xpath('//div[@id="content"]/text()')
with open(path + bookname + '.txt', 'a', encoding='utf-8') as f:
f.write(name)
for con in text:
f.write(con)
print(f'{name} ===> 下载完成')
def main():
urls = get_urls()
for url in urls:
get_text(url)
time.sleep(random.randint(1, 3))
if __name__ == '__main__':
main()
path :存放小说文件的路径
bookname:小说文件名称
weburl:小说网站域名
bookurl:小说URL
脚本保存为 .py 后缀的文件,可双击直接运行,也可以在命令窗口或者 idea 中运行。
![006fRELkly4h7739c2qpqj317v0fymyo 006fRELkly4h7739c2qpqj317v0fymyo](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
![006fRELkly4h7739cu6ekj30l2051t8q 006fRELkly4h7739cu6ekj30l2051t8q](http://excelbook.cn/wp-content/themes/CorePress/static/img/loading.gif)
出现上图输出内容,说明脚本是有效果的。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。
共有 0 条评论