用爬虫写一个,小说下载程序
环境:python 3.7.3
没啥难度和技术含量,随便写写。本来程序有部分可用format进行优化,但又想了想小说名可能还会
有一些奇奇怪怪的符号,就没弄了。
import requests
from lxml import etree
import os
def novel_download(novel): #搜索小说名,找出下载地址
dic={}
url="https://www.shuyaya.cc/search?wd="+novel
head={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r=requests.get(url,headers=head)
r.encoding=r.apparent_encoding
content=etree.HTML(r.text)
hrefs=content.xpath('//span[@class="width369 jhfd"]/a[@class="green"]/@href') #找到对应的所有小说的url
names=content.xpath('//span[@class="width111"]/a/text()') #找到对应的作者
novel_name=content.xpath('//span[@class="width369 jhfd"]/a[@class="green"]/text()') #找到对应书名
for i in range(0,len(hrefs)): #用字典建立对应关系
dic[i]=hrefs[i]
print("{:^26}\t{:^10}".format("书名","作者"))
for i in range(0,len(hrefs)):
print("{:<2}{:^20}\t{:^10}".format(str(i),novel_name[i],names[i]))
num=int(input("输入你想下载小说对应的序号: "))
r=requests.get(dic[num],headers=head)
r.encoding=r.apparent_encoding
content=etree.HTML(r.text)
href=content.xpath('//div[@class="downmenu"]/a[@rel="nofollow"]/@href')
r=requests.get(href[0],headers=head)
print("\n下载中.....\n")
f=open("F://novel/"+novel_name[num]+".zip",'wb')
f.write(r.content)
f.close()
if __name__ == "__main__":
try:
os.makedirs("F://novel") #建立存储路径
except:
pass
print("下载的小说存保存在F://novel")
print("输入的小说尽量准确以免下载错误")
print(
"""
example:
斗罗大陆IV终极斗罗
斗罗大陆 唐家三少
可在小说名后面加上作者名以提高准确性,也支持模糊搜索
"""
)
novel=input("\n输入你想下载的小说: \n")
print("\n")
try:
novel_download(novel)
print("\n下载完成")
print("按回车键关闭")
input("")
except:
print("\n你输入的小说名不准确,或者还没有这本小说")
print("按回车键关闭")
input("")
运行如下图所示