找回密码
  注册[Register]
查看: 1727|回复: 12

[python] 新手实战写的小说爬取【新笔趣阁】

  [复制链接]
发表于 2020-12-23 22:08 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

刚学习python 今天实践一下,因为个人比较喜欢看小说就写了一个新笔趣阁的爬虫
望大佬指点,因为还没学多线程所以是个单线程的
看了一下其他人的帖子,我又添加了从中间某一章开始下载的功能
  1. import os
  2. import re

  3. import requests

  4. headers = {
  5.     'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400',
  7.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

  8. }
  9. # 书名存储变量
  10. name = ''
  11. zhang = 0


  12. def get_urls(url):
  13.     # 请求网址
  14.     html = requests.get(url, headers=headers)
  15.     # 指定页面编码
  16.     html.encoding = html.apparent_encoding
  17.     # 用正则获取章节URL
  18.     reg = r"<dd><a href='(.*?)' >(.*?)</a></dd>"
  19.     urls = re.findall(reg, html.text)
  20.     # 用正则获取章节名
  21.     reg2 = r"<h1>(.*?)</h1>"
  22.     name = re.findall(reg2, html.text)
  23.     return urls, name


  24. def download_book(urls, zhang):
  25.     # 循环输出章节URL
  26.     for url in urls[zhang:]:
  27.         # 章节URL
  28.         bookUrl = url[0]
  29.         # 获取到的URL如下:/10/10489/4535761.html 所以要拼接一下
  30.         bookUrl = 'http://www.xbiquge.la' + bookUrl
  31.         bookTitle = url[1]
  32.         # 删除章节标题中可能影响创建文件的符号如:*?:/\\<>|
  33.         bookTitle = re.sub('[*?:/\\<>|]', '', bookTitle)
  34.         # 抓取每一章节内容
  35.         chapter = requests.get(bookUrl, headers=headers)
  36.         chapter.encoding = chapter.apparent_encoding
  37.         chapter_reg = r'<div id="content">(.*?)<p><a href='
  38.         chapter_content = re.findall(chapter_reg, chapter.text)
  39.         # 转化list为str
  40.         data = str(chapter_content)
  41.         # 替换章节内容中的字符
  42.         data = re.sub('[\r\[\]]', '', data)
  43.         data = data.replace(' ', ' ').replace('<br />', '').replace('\\r\\r', '').replace('\'', '')
  44.         # 将数据写入文档
  45.         print("正在下载:%s" % bookTitle)
  46.         with open('./Books/' + name + '/{}.txt'.format(bookTitle), 'w+', encoding='gbk') as f:
  47.             f.write(data)
  48.             f.close()


  49. def mkdir(name):
  50.     folder = os.path.exists('Books\\' + name)
  51.     if not folder:  # 判断是否存在文件夹如果不存在则创建为文件夹
  52.         os.makedirs('Books\\' + name)  # makedirs 创建文件时如果路径不存在会创建这个路径
  53.         print('文件夹不存在,已创建')
  54.     else:
  55.         print('文件夹存在')


  56. if __name__ == '__main__':
  57.     print("书籍ID由新笔趣阁:www.xbiquge.la 提供")
  58.     bookId = input("请输入书籍ID:")
  59.     url = 'http://www.xbiquge.la/1/'
  60.     url = url + bookId + '/'
  61.     # url = 'http://www.xbiquge.la/1/1618'
  62.     zhang = int(input("请输入开始章节:"))
  63.     zhang = zhang - 1
  64.     urls = get_urls(url)[0]
  65.     name = get_urls(url)[1]
  66.     name = str(name)
  67.     name = name.replace("['", "").replace("']", "")
  68.     mkdir(name)
  69.     download_book(urls, zhang)
复制代码



170757dsnfgff8ggc0ffke.png
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-12-23 22:19 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-23 22:20 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-23 22:26 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-23 22:26 来自手机 | 显示全部楼层
楼主牛逼
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2020-12-23 22:45 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-23 23:41 | 显示全部楼层

感谢分享,谢谢提供分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-24 00:56 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-24 01:31 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-24 07:24 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-3 10:55 , Processed in 0.042915 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表