鱼C论坛

 找回密码
 立即注册
查看: 2669|回复: 17

[技术交流] Python 爬取笔趣阁小说

[复制链接]
发表于 2020-6-17 10:26:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python 爬取笔趣阁小说


本来只想爬一部的(和同学炫耀,他们不借我书我就自己爬下来看),结果发现是个通用爬虫,

基本上都可以爬。

一开始是给出小说URL直接上去爬,后来改了下,加了个搜索功能。

后来,想起来IDM有个什么断点续传功能,我就加了一个。

默认开启断点,想关掉只能改代码(这个我后面会改)。

每次会在程序所在位置产生一个breakpoint.cfg,当然,是隐藏的(调API侠)。

这个文件里面有小说名字,章节数,和下载列表。

这个章节没有标题,只有数字。

后面考虑下加个多线程,但没啥思路,还请各位大佬帮助。

不多说了,放代码:

  1. from requests import get
  2. from lxml import etree
  3. import win32api, win32con

  4. def open_url(url):
  5.     res = get(url)
  6.     res.encoding = 'utf-8'
  7.     return res

  8. def search():
  9.     html = etree.HTML(open_url('http://www.tianxiabachang.cn/cse/search?q=%s' % input("请输入小说关键词:")).text)
  10.     res = list(filter(None, [each.strip() for each in html.xpath('//*[@id="main"]/div[1]//text()')[19:]]))
  11.     typ, href = ["\n类型:", "名字:", "更新章节:", "作者:", "点击量:", "更新日期:", "状态:"], ['http://www.tianxiabachang.cn' + each for each in html.xpath('//*[@id="main"]/div[1]/ul/li[2]/span[2]/a/@href')]
  12.     length = len(typ)
  13.     cnt = 1
  14.     for i in range(len(res)):
  15.         if not i % 7:
  16.             print('\n', f"第{cnt}个:", sep = '')
  17.             cnt += 1
  18.         print(typ[i % length], res[i], sep = '')
  19.     n = int(input("请输入想要选择的小说序号:"))
  20.     return href[n - 1], res[1::7][n]

  21. def get_breakpoint():
  22.     try:
  23.         point = open("breakpoint.cfg")
  24.     except:
  25.         print("断点不存在!")
  26.     else:
  27.         zj = eval(point.readline())
  28.         name = point.readline()
  29.         href = eval(point.readline())
  30.         return zj, href, name


  31. def get_Info(res, zj, f):
  32.     html = etree.HTML(res.text)
  33.     print("第 %d 章开始爬取.." % zj)
  34.     f.write(f'\n\t\t\t\t\t\t\t 第{zj}章 \n\n')
  35.     for each in html.xpath('//*[@id="content"]//text()'):
  36.         temp = ''.join(each.split()) + '\n'
  37.         for i in range(len(temp)):
  38.             if temp[i] in ',。!?“‘”’…': # 这段代码我还未检测过是否好用,各位可以随时反馈给我!
  39.                 f.write('\n')
  40.             f.write(temp[i])
  41.             cnt += 1

  42. get_url = lambda res: ['http://www.tianxiabachang.cn' + each for each in etree.HTML(res.text).xpath('//*[@id="list"]/dl/dd/a/@href')][9:]

  43. def main():
  44.     isbp = input("请输入是否使用断点: Y/N")
  45.     if isbp == "Y":
  46.         zj, url_list, fname = get_breakpoint()
  47.         f = open(r"%s.txt" % fname.strip(), 'a', encoding = "utf-8") # 加上strip是为了去掉readline带来的\n
  48.     else:
  49.         url, fname = search()
  50.         f = open(r"%s.txt" % fname, 'w', encoding = "utf-8")
  51.         url_list = get_url(open_url(url))
  52.         zj = -1
  53.     try:
  54.         temp = url_list[:]
  55.         if zj > 0:
  56.             for i in range(zj, len(url_list)):
  57.                 get_Info(open_url(url_list[i]), i + 1, f)
  58.                 temp.remove(url_list[i])
  59.         else:
  60.             for i in range(len(url_list)):
  61.                 get_Info(open_url(url_list[i]), i + 1, f)
  62.                 temp.remove(url_list[i])
  63.             
  64.     except KeyboardInterrupt:
  65.         point = open("breakpoint.cfg", 'w')
  66.         win32api.SetFileAttributes('breakpoint.cfg', win32con.FILE_ATTRIBUTE_HIDDEN) # 把这个配置文件设置为隐藏
  67.         point.write(str(i) + '\n')
  68.         point.write(fname + '\n')
  69.         point.write(str(temp))
  70.         point.close()
  71.         print("程序结束,断点设置完毕!")
  72.     except Exception as exc:print("出现错误!", exc)
  73.     finally:f.close()

  74. main()
复制代码


当然,爬下来的小说断句还是很差的....正在慢慢改进。

有BUG请指出!:D

评分

参与人数 2荣誉 +6 鱼币 +5 收起 理由
Hello. + 1 鱼C有你更精彩^_^
Twilight6 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 10:27:51 | 显示全部楼层
我刚给人推荐这个app,还挺不错的。

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
qiuyouzhi + 3 + 3 + 3 神速啊

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-17 10:28:12 | 显示全部楼层
heidern0612 发表于 2020-6-17 10:27
我刚给人推荐这个app,还挺不错的。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 10:31:27 | 显示全部楼层
  很强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 11:01:31 | 显示全部楼层
套娃,笔趣阁是白嫖正版网站的,你是白嫖笔趣阁的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-17 11:08:59 | 显示全部楼层
PLUS甲鱼 发表于 2020-6-17 11:01
套娃,笔趣阁是白嫖正版网站的,你是白嫖笔趣阁的。

咋算我白嫖笔趣阁的呢
好歹也是我自己写代码爬的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 11:32:26 From FishC Mobile | 显示全部楼层
都是大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 13:32:12 | 显示全部楼层
加个多线程吧,之前写过爬笔趣阁的,不用的多线程几千章的小说挺慢的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 13:51:49 | 显示全部楼层
qiuyouzhi 发表于 2020-6-17 11:08
咋算我白嫖笔趣阁的呢
好歹也是我自己写代码爬的

少年好思路,不过笔趣阁这个鬼东西其实是腾讯的,白嫖党第一人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-17 13:53:00 | 显示全部楼层
PLUS甲鱼 发表于 2020-6-17 13:51
少年好思路,不过笔趣阁这个鬼东西其实是腾讯的,白嫖党第一人

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 14:38:11 | 显示全部楼层
很强我还是个萌新加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-28 20:49:00 | 显示全部楼层
qiuyouzhi 发表于 2020-6-17 11:08
咋算我白嫖笔趣阁的呢
好歹也是我自己写代码爬的

大佬,萌新想问下,为什么直接复制代码,放到IDLE保存之后用不了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 08:48:43 | 显示全部楼层
xiyi2 发表于 2020-6-28 20:49
大佬,萌新想问下,为什么直接复制代码,放到IDLE保存之后用不了呢

Ctrl+N新建一个文件再把我的代码复制进去
那些模块啥的都得安装好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 20:55:16 | 显示全部楼层
qiuyouzhi 发表于 2020-6-29 08:48
Ctrl+N新建一个文件再把我的代码复制进去
那些模块啥的都得安装好

不懂...看来我还需要学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 16:25:10 | 显示全部楼层
有一说一最近天天都是一堆人爬笔趣阁。。。要不是笔趣阁多  感觉真遭不住
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-17 19:04:32 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 08:42:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 10:41:43 | 显示全部楼层
这个厉害,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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