qiuyouzhi 发表于 2020-6-17 10:26:46

Python 爬取笔趣阁小说

Python 爬取笔趣阁小说

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

基本上都可以爬。

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

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

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

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

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

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

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

不多说了,放代码:

from requests import get
from lxml import etree
import win32api, win32con

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

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

def get_breakpoint():
    try:
      point = open("breakpoint.cfg")
    except:
      print("断点不存在!")
    else:
      zj = eval(point.readline())
      name = point.readline()
      href = eval(point.readline())
      return zj, href, name


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

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

def main():
    isbp = input("请输入是否使用断点: Y/N")
    if isbp == "Y":
      zj, url_list, fname = get_breakpoint()
      f = open(r"%s.txt" % fname.strip(), 'a', encoding = "utf-8") # 加上strip是为了去掉readline带来的\n
    else:
      url, fname = search()
      f = open(r"%s.txt" % fname, 'w', encoding = "utf-8")
      url_list = get_url(open_url(url))
      zj = -1
    try:
      temp = url_list[:]
      if zj > 0:
            for i in range(zj, len(url_list)):
                get_Info(open_url(url_list), i + 1, f)
                temp.remove(url_list)
      else:
            for i in range(len(url_list)):
                get_Info(open_url(url_list), i + 1, f)
                temp.remove(url_list)
            
    except KeyboardInterrupt:
      point = open("breakpoint.cfg", 'w')
      win32api.SetFileAttributes('breakpoint.cfg', win32con.FILE_ATTRIBUTE_HIDDEN) # 把这个配置文件设置为隐藏
      point.write(str(i) + '\n')
      point.write(fname + '\n')
      point.write(str(temp))
      point.close()
      print("程序结束,断点设置完毕!")
    except Exception as exc:print("出现错误!", exc)
    finally:f.close()

main()

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

有BUG请指出!:D

heidern0612 发表于 2020-6-17 10:27:51

我刚给人推荐这个app,还挺不错的。

qiuyouzhi 发表于 2020-6-17 10:28:12

heidern0612 发表于 2020-6-17 10:27
我刚给人推荐这个app,还挺不错的。

{:10_256:}

Twilight6 发表于 2020-6-17 10:31:27

{:10_297:}很强

PLUS甲鱼 发表于 2020-6-17 11:01:31

套娃,笔趣阁是白嫖正版网站的,你是白嫖笔趣阁的。

qiuyouzhi 发表于 2020-6-17 11:08:59

PLUS甲鱼 发表于 2020-6-17 11:01
套娃,笔趣阁是白嫖正版网站的,你是白嫖笔趣阁的。

咋算我白嫖笔趣阁的呢
好歹也是我自己写代码爬的{:10_264:}

hrp 发表于 2020-6-17 11:32:26

都是大神

叙白 发表于 2020-6-17 13:32:12

加个多线程吧,之前写过爬笔趣阁的,不用的多线程几千章的小说挺慢的

PLUS甲鱼 发表于 2020-6-17 13:51:49

qiuyouzhi 发表于 2020-6-17 11:08
咋算我白嫖笔趣阁的呢
好歹也是我自己写代码爬的

少年好思路,不过笔趣阁这个鬼东西其实是腾讯的,白嫖党第一人

qiuyouzhi 发表于 2020-6-17 13:53:00

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

{:10_256:}

李七夜l 发表于 2020-6-17 14:38:11

很强我还是个萌新加油{:10_281:}

xiyi2 发表于 2020-6-28 20:49:00

qiuyouzhi 发表于 2020-6-17 11:08
咋算我白嫖笔趣阁的呢
好歹也是我自己写代码爬的

大佬,萌新想问下,为什么直接复制代码,放到IDLE保存之后用不了呢

qiuyouzhi 发表于 2020-6-29 08:48:43

xiyi2 发表于 2020-6-28 20:49
大佬,萌新想问下,为什么直接复制代码,放到IDLE保存之后用不了呢

Ctrl+N新建一个文件再把我的代码复制进去
那些模块啥的都得安装好

xiyi2 发表于 2020-6-29 20:55:16

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

不懂...看来我还需要学习

温木zou 发表于 2021-1-7 16:25:10

有一说一最近天天都是一堆人爬笔趣阁。。。要不是笔趣阁多感觉真遭不住

矿洞菠菜 发表于 2021-1-17 19:04:32

666

sinaop 发表于 2021-1-18 08:42:23

{:5_109:}

yywwf2003 发表于 2021-1-18 10:41:43

这个厉害,谢谢大佬
页: [1]
查看完整版本: Python 爬取笔趣阁小说