python下载小说合集

 

这里以金庸老先生小说合集为例。

 

1. 数据抓取

首先,我们需要找到小说网站,jinyong.zuopinj.com

 

 

 其次通过浏览器分析工具,分析页面数据。

 

2.具体实现

每本书都有对应的书籍ID,每本书相应的章节数ID,根据这两个信息,我们可完成如下代码。

def get_chapter(url):
    html = requests.get(url, timeout=30)
    # 处理网页乱码问题
    html.encoding = html.apparent_encoding
    # print(html.text)
    res = html.text
    # 解析html
    soup = BeautifulSoup(res, "lxml")
    story = soup.find('title').get_text().split()[0]
    h1 = soup.find('h1').text
    # 获取章节内容
    text = soup.find('div', id='htmlContent')
    # 处理章节内容
    content = text.get_text('\n', 'br/').replace('\n', '\n    ')
    content = content.replace('  ', '\n  ')
    # print(story)
    # print(h1)
    # print(content)
    result = h1+'\n\n\n'+content+'\n\n'
    save_file(story, result)

金庸首页小说总共有15本,采用循环方法去获取小说数据。期间加了多线程和进度条效果,让代码运行速度更快更美观。

for i, book in enumerate(books):
    print("正在下载《{0}》小说中...".format(book))
    pbar = tqdm(total=page[i+1]+1-page[i])
    for num in range(page[i], page[i+1]):
        url = "http://jinyong.zuopinj.com/{0}/{1}.html".format(order[i], num)
        # time.sleep(1)
        # 加入多线程
        t = threading.Thread(target=get_chapter, args=(url, ))
        t.start()
        t.join()
        pbar.update(1)
    print("《{0}》小说下载完成...".format(book))
    pbar.close()

效果图如下:

 

 

 

 

 更多详情,请参考原文

https://mp.weixin.qq.com/s?__biz=Mzg3OTExODI3OA==&mid=2247484273&idx=1&sn=eece8c7c98e38e192643d7fcb3c2b70e&chksm=cf0811d8f87f98ce93c3c8f218d946276306f09c4cb6f404e11f5b293be2d07c4ce007deced0&token=1994335322&lang=zh_CN#rd

 

 

posted @ 2021-04-01 10:00  水映枫像  阅读(684)  评论(0)    收藏  举报