【PyQt6】小说下载DrissionPage及阅读PyQt6

1 简介

看到一本小说 《无敌六皇子》 【https://www.xsobiquge.org/book/178299/】看小说简介觉得挺有意思的,想读一读。浏览器阅读 不能保存进度,就好烦。想着就爬下来,本地看。

看着挺简单的网站,requests 就只能爬个目录页,分章内容总是被拒,UA Refer Cookie 以及所有的请求头都加了,也没有效果,最终还是回到浏览器去,此时 DrissionPage 就用上了。

2 DrissionPage

DrissionPage 号称同时实现“写得快”和“跑得快”,试过以后还真是巨方便。
DrissionPage 的教程我就略过不谈了,网上有总结的,感谢哪些前辈们的分享。
我就直接分享一下 具体的爬虫代码吧, 代码量真的很少

demo

from DrissionPage import SessionPage
import os
import time
import random
import re

# 创建页面对象
page = SessionPage()

subpages = []

reg = r"第(\d+)章.*"
pat = re.compile(reg)


def formatTitle(title):
    match = pat.search(title)
    if match:
        idx = match.group(1)
        res = title.replace(idx, f'{
     idx:0>4}')
        return res

    return title


def download_catalog(url):
    page.get(start_url)
    # 根据 xpath 或 css selector 查找

    xpath = '//*[@id="list"]/dl/dd'
    lists = page.eles(f'xpath:{
     xpath}')
    for li in lists:
        a = li.ele('tag:a')
        href = a.attr('href')
        title = a.text
        title = formatTitle(title)
        # print(a.attr('href'), a.text)
        subpages.append({
   'href': href, 'title': title})
    print(f'{
     url} 下载完成')


def download_chapter():
    for i in range(min_chapters-1, max_chapters):
        dic = subpages[i]
        time.sleep(random.random() * 2)
        ret = page.get(dic['href'])
        if not ret:
            print(ret)
            return
        # //*[@id="content"]
        xpath = '//*[@id="content"]'
        elem = page.ele(f'xpath:{
     xpath}')
        context = elem.text

        with open(f"{
     dic['title']}.txt", 'w', encoding='utf-8') as f:
            lines = context.splitlines()
            for line in lines:
                line = line.strip()
                if line == '网页版章节内容慢,请下载爱阅小说app阅读最新内容':
                    break
                if line:
                    f.write('\t'+line+'\n')
        print(f'{dic['title']} 下载完成')


if __name__ == 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值