吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2899|回复: 33
收起左侧

[Python 原创] 带彩色进度条的笔趣阁爬虫

  [复制链接]
xccxvb 发表于 2023-7-24 22:42
本帖最后由 xccxvb 于 2023-7-25 11:55 编辑

平时的控制台程序比较枯燥乏味,rich这个库可以让我们的控制台程序不再枯燥乏味
Snipaste_2023-07-24_22-39-20.jpg
手机也能用!
Screenshot_2023-07-24-23-08-56-146_ru.iiec.pydroid3.jpg
Snipaste_2023-07-24_22-40-31.jpg
上代码!
直接运行代码即可,替换小说就修改Spider类里的url属性。
[Python] 纯文本查看 复制代码
import requests, re
from rich.progress import Progress
from rich.progress import BarColumn,Progress,SpinnerColumn,TaskProgressColumn,TimeElapsedColumn,TimeRemainingColumn,MofNCompleteColumn
class Spider:
    url = "http://www.ibiquge.cc/83110"
    baseurl = "http://www.ibiquge.cc"
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    def __init__(self) -> None:
        self.getcatalog()
        self.download()
    #获取章节目录
    def getcatalog(self):
        self.data = []
        rsp = requests.get(self.url, headers=self.headers)
        purl = '<dd><a href ="(.*?)">'
        ptitle = '<dd><a href =".*?>(.*?)<'
        for i, j in zip(re.findall(purl, rsp.text),re.findall(ptitle, rsp.text)):
            self.data.append([j, self.baseurl+i])
    #下载
    def download(self):
        with open('小说.txt', 'a') as f:
            #设置进度条参数
            with Progress(SpinnerColumn(spinner_name='monkey', speed=0.2),"{task.description}",BarColumn(),MofNCompleteColumn(),TaskProgressColumn(),
                      TimeElapsedColumn(),TimeRemainingColumn(),) as progress:
                track = progress.add_task(total=len(self.data), description='downloading')
                progress.update(track, advance=0)  # 初始化进度条
                for i in self.data:
                    f.write(i[0]+'\n')
                    txt = self.parse(i[1])
                    f.writelines(txt)
                    progress.update(track, advance=1,description='downloading')
    #解析小说内容
    def parse(self, url):
        rsp = requests.get(url,headers=self.headers)
        content = rsp.text
        p = '>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;([\s\S]*?)<'
        txt = re.findall(p, rsp.text)
        return txt #txt is list
Spider()


如果要把开头的猴子捂脸表情改成月亮,就把monkey改为moon!
第38行代码,正则里的空格(&nbsp; )代码复制过来竟然直接变成空格了,如果无法正确获取内容可以尝试修改第38行正则表达式为:>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;([\s\S]*?)<

免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
qylisten + 1 + 1 谢谢@Thanks!
helh0275 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
愷龍 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yiqibufenli + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wm517 发表于 2023-7-25 13:17

【ai编写】改了下;文件名从url取,url改成变量

本帖最后由 wm517 于 2023-7-25 14:38 编辑
xiaoshuo.py
import argparse
import requests
import re
from rich.progress import Progress
from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TimeElapsedColumn, TimeRemainingColumn, MofNCompleteColumn
from concurrent.futures import ThreadPoolExecutor
import os

class Spider:
    baseurl = "http://www.ibiquge.cc"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }

    def __init__(self, url):
        self.url = url
        self.getcatalog()
        self.download()

    # 获取章节目录
    def getcatalog(self):
        self.data = []
        rsp = requests.get(self.url, headers=self.headers)
        purl = '<dd><a href ="(.*?)">'
        ptitle = '<dd><a href =".*?>(.*?)<'
        for i, j in zip(re.findall(purl, rsp.text), re.findall(ptitle, rsp.text)):
            self.data.append([j, self.baseurl + i])

    # 下载
    def download(self):
        novel_name = self.extract_novel_name(self.url)
        file_path = f"{novel_name}.txt"
        with open(file_path, 'w') as f:
            # 设置进度条参数
            with Progress(
                SpinnerColumn(spinner_name='monkey', speed=0.2),
                "{task.description}",
                BarColumn(),
                MofNCompleteColumn(),
                TaskProgressColumn(),
                TimeElapsedColumn(),
                TimeRemainingColumn()
            ) as progress:
                track = progress.add_task(total=len(self.data), description='downloading')
                progress.update(track, advance=0)  # 初始化进度条
                with ThreadPoolExecutor() as executor:
                    futures = []
                    for i in self.data:
                        future = executor.submit(self.parse, i[1])
                        futures.append((future, i))

                    for future, i in futures:
                        f.write(i[0] + '\n')
                        txt = future.result()
                        f.writelines(txt)
                        progress.update(track, advance=1, description='downloading')

    # 解析小说内容
    def parse(self, url):
        rsp = requests.get(url, headers=self.headers)
        content = rsp.text
        p = '>        ([\s\S]*?)<'
        txt = re.findall(p, rsp.text)
        return txt  # txt is a list

    # 提取小说名字
    def extract_novel_name(self, url):
        novel_id = url.split('/')[-2]
        rsp = requests.get(f"{self.baseurl}/{novel_id}/")
        ptitle = '<h1>(.*?)</h1>'
        title = re.findall(ptitle, rsp.text)[0]
        return title

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('url', help='The URL of the novel')
    args = parser.parse_args()

    Spider(args.url)
运行
python3 xiaoshuo.py  http://www.ibiquge.cc/83110
sk8820 发表于 2023-7-25 11:52
&#65533;  downloading ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&#9594;━━ 862/928  93% 0:07:46 0:00:40
有进度条,时间很慢,抓取过程中,小说.txt是零字节的。完成后,小说.txt只有21KB,里面只是章节目录,无章节内容。
wapjsx 发表于 2023-7-24 22:50
鹿鸣 发表于 2023-7-24 23:39
这个不错哎挺好看学习一下
wdz2018 发表于 2023-7-24 23:48
支持一下,黑白的太单调了
andy512 发表于 2023-7-25 00:00
看小说app的一个小改动,不错
jianggu 发表于 2023-7-25 07:29
很好,很有意思
pdfhvy141 发表于 2023-7-25 07:51
支持一下,
99929yf 发表于 2023-7-25 08:23
支持啦,谢谢
Yang|阳 发表于 2023-7-25 08:24
不错,支持
xinxiu 发表于 2023-7-25 08:57
这个好玩。不错。不错。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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