50行Python代码实现自动下载小说,并打包exe直接

x33g5p2x  于2022-02-12 转载在 Python  
字(3.2k)|赞(0)|评价(0)|浏览(389)

室友喊着没有小说看,让我给他推荐几本,这能难倒我?

分分钟就用python给他把整个网站的小说都给下载下来了,不愧是我啊!

话不多说,我们直接开整!文末附视频

要准备的东西

软件

  1. python 3.8
  2. pycharm

使用的模块

  1. requests >>> pip install requests 数据请求
  2. parsel >>> pip install parsel 数据解析
  3. (完善功能) 添加搜索功能 搜索小说名字或者作者名字
  4. tqdm >>> pip install tqdm 下载进度条显示模块
  5. pandas >>> pip install pandas 输入的格式好看一些

win + R 输入cmd 输入安装命令 pip install 模块名 ;
如果出现爆红,可能是因为,网络连接超时,切换国内镜像源;
黄色是警告 ,可以忽略;

输入小说名下载

打包成exe程序, 是需要安装 pyinstaller ,命令提示符窗口输入 pip install pyinstaller

代码展示

下方我会放上视频,可以对照视频讲解的更加清楚。

  1. # 导入数据请求模块
  2. import requests
  3. # 导入数据解析模块
  4. import parsel
  5. # 导入正则表达式模块
  6. import re
  7. # 导入pandas
  8. import pandas as pd
  9. # 导入进度条显示模块
  10. from tqdm import tqdm
  11. while True:
  12. key_word = input('请输入你想要下载的小说名字(输入0即可退出): ')
  13. if key_word == '0':
  14. break
  15. search_url = f'https://www.***.com/search.php?q={key_word}'
  16. headers = {
  17. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
  18. }
  19. response = requests.get(url=search_url, headers=headers)
  20. # print(response.text)
  21. selector_1 = parsel.Selector(response.text)
  22. divs = selector_1.css('.result-list div.result-item')
  23. # print(divs)
  24. if divs:
  25. lis = []
  26. for div in divs:
  27. novel_name = div.css('.result-game-item-title-link::attr(title)').get() # 小说名字
  28. href = div.css('.result-game-item-title-link::attr(href)').get().split('/')[2] # ID
  29. author = div.css('.result-game-item-info p:nth-child(1) span:nth-child(2)::text').get() # 作者
  30. # print(novel_name, href, author)
  31. dit = {
  32. '书名': novel_name,
  33. '作者': author,
  34. '书ID': href,
  35. }
  36. lis.append(dit)
  37. print(f'一共搜索到{len(lis)}条数据内容, 结果如下')
  38. search_data = pd.DataFrame(lis)
  39. print(search_data)
  40. key_num = input('请选择你想要下载小说序号: ') # 输入的数据类型字符串数据
  41. novel_id = lis[int(key_num)]['书ID']
  42. url = f'https://www.***.com/book/{novel_id}/'
  43. headers = {
  44. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
  45. }
  46. response = requests.get(url, headers)
  47. # print(response.text) # 正则表达式提取出来数据返回列表 ['天道修改器']
  48. novel_name = re.findall('<h1>(.*?)</h1>', response.text)[0]
  49. novel_info = re.findall('<dd><a href="(.*?)" >(.*?)</a></dd>', response.text)
  50. # print(novel_name)
  51. # print(novel_info)
  52. for novel_url, novel_title in tqdm(novel_info):
  53. # 'https://www.***e.com/book/60126/14362.html'
  54. novel_url = 'https://www.***.com' + novel_url
  55. # print(novel_url, novel_title)
  56. # 1. 发送请求, 对于刚刚分析得到的url地址发送请求
  57. # url = 'https://www.biqugee.com/book/60126/14362.html'
  58. response = requests.get(novel_url, headers) # <Response [200]> 返回response响应对象, 200表示请求成功
  59. # 2. 获取数据, 获取服务器返回的response响应数据
  60. # response.text 获取响应体返回文本数据(网页源代码)
  61. # print(response.text)
  62. # 3. 解析数据, 提取我们想要的数据内容 小说章节名字 以及小说内容
  63. # 提取数据方式: xpath css re 这三种方式都是可以提取数据
  64. selector = parsel.Selector(response.text) # 把获取到的response.text 转换成 selector 对象
  65. # novel_title = selector.css('.bookname h1::text').get() # get获取第一个标签数据 返回字符串数据
  66. # novel_title_1 = selector.xpath('//*[@class="bookname"]/h1/text()').get() # get获取第一个标签数据 返回字符串数据
  67. novel_content_list = selector.css('#content::text').getall() # getall 获取所有标签内容, 返回列表数据
  68. # 需要把列表转成字符串数据 join \n换行符
  69. novel_content = '\n'.join(novel_content_list)
  70. # print(novel_title)
  71. # print(novel_title_1)
  72. # print(novel_content_list)
  73. # print(novel_content)
  74. # 4. 保存数据
  75. # w写入数据但是覆盖 a写入追加写入, 写入文件末尾 b 二进制模式
  76. """
  77. 第一章 xxx
  78. 小说内容
  79. 第二章 xxx
  80. 小说内容
  81. """
  82. with open(novel_name + '.txt', mode='a', encoding='utf-8') as f:
  83. f.write(novel_title)
  84. f.write('\n')
  85. f.write(novel_content)
  86. f.write('\n')
  87. # print('正在保存', novel_title)
  88. else:
  89. print('请正确输入小说名字或者作者名字 / 没有这本书的数据..')

视频讲解:

50行Python代码实现自动下载小说,并打包exe

相关文章