吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3963|回复: 108
上一主题 下一主题
收起左侧

[Python 原创] Python爬虫,过节了(五一),给闲在家里的外甥弄点卷子做做

  [复制链接]
跳转到指定楼层
#
a525 发表于 2024-4-30 20:08 回帖奖励
外甥在家闲置,不是打游戏就是看动漫。都快上五年级了,还不知道努力,将来还指望他给我端一碗饭吃呢!!!
所以,我今天给他买了个打印机,又花了点时间写个爬虫,弄了一批卷子,等后天打印机送到家,让他的五一充实起来。
废话少说,上代码!!!!!!!
[Python] 纯文本查看 复制代码
import concurrent.futures
import os
import threading
from concurrent.futures import ThreadPoolExecutor

import rarfile
import requests
from bs4 import BeautifulSoup


def download(url, category, level, name):
    path = category + "/" + level + "/" + name + ".rar"
    dir_name = os.path.dirname(path)
    os.makedirs(dir_name, exist_ok=True)
    res = requests.get(domain + url, headers=dic)
    with open(path, "wb") as f:
        f.write(res.content)
        f.flush()
        print(f'线程:{threading.current_thread().name} 下载完成:{path}')
    # 解压
    extract_rar(path, category + "/" + level)
    # 自动删除rar
    os.remove(path)


def extract_rar(file_path, extract_path):
    with rarfile.RarFile(file_path) as rf:
        for member in rf.infolist():
            if not member.filename.endswith('.doc'):
                continue
            rf.extract(member.filename, extract_path)


def getPageList(page_index):
    page_url = f"a/sjyw4/list_109_{page_index}.html"
    root = requests.get(domain + page_url, headers=dic)
    root.encoding = "gb2312"
    root_html = BeautifulSoup(root.text, "html.parser")
    tr_list = root_html.find("div", class_="listbox").find("table").find_all("tr")
    for index, tr in enumerate(tr_list):
        if index == 0 or (tr.text.find(".doc") == -1):
            continue
        tds = tr.find_all("td")
        name = tds[0].text
        suffix = tds[1].text
        level = tds[2].text
        category = tds[3].text
        child_url = domain + tds[0].find("a").get("href")
        child_html = BeautifulSoup(requests.get(child_url, headers=dic).text, "html.parser")
        a = child_html.find("div", class_="content").find_next("a")
        down_url = a.get("href")
        print(f'开始下载:{category}-{level}-{name}{suffix} url: {domain}{down_url}')
        task = pool.submit(download, down_url, category, level, name)
        task_list.append(task)


if __name__ == '__main__':
    domain = "https://www.shijuan1.com/"
    dic = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0"
    }
    # 创建线程池
    pool = ThreadPoolExecutor(5)
    task_list = []

    # 遍历10页,下载
    for page in range(1, 10):
        getPageList(page)

    # 等待所有任务完成
    concurrent.futures.wait(task_list, return_when='ALL_COMPLETED')
    pool.shutdown()
    print("所有任务完成,共下载{}个文件", len(task_list))


注意:自动解压(rar)需要安装`rarfile`库,另外需要安装winrar解压软件,并把UnRar.exe文件复制到C:\Windows目录,否则不会自动解压,要手动解压。
Python这库的支持真傻X,装了库竟然还得装个软件,谁能告诉我还有没有别的办法解压???

以上代码仅用于学习,不得非法使用,一切损失由使用者自行承担,我本人不承担任何责任。
另外,感谢第一试卷网的无私,有个免费获取试卷的渠道,大家适当使用,不要随意用爬虫攻击,珍惜当下。

image.png (163.35 KB, 下载次数: 10)

运行截图

运行截图

image.png (87.93 KB, 下载次数: 2)

结果图

结果图

免费评分

参与人数 16吾爱币 +20 热心值 +13 收起 理由
xiaobinwang + 1 + 1 谢谢@Thanks!
pwp + 1 + 1 我很赞同!
camson + 1 我很赞同!
jiligulu + 1 我很赞同!
Diamondzl + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
kekai + 1 + 1 热心回复!
Liao594 + 1 + 1 我很赞同!
numberrr007 + 1 + 1 我很赞同!
小兔一样的小白 + 1 + 1 我很赞同!
bobo2017365 + 1 谢谢@Thanks!
121woaipojie121 + 1 谢谢@Thanks!
ppkkqq + 1 + 1 谢谢@Thanks!
傲雪不傲霜 + 1 + 1 谢谢@Thanks!
lastmu + 1 我很赞同!
21MyCode + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
lz16448492 发表于 2024-5-1 00:09
小心你外甥他明年正月去剪头发。
推荐
Tinghe218 发表于 2024-4-30 22:30
推荐
hebeijianke 发表于 2024-5-1 07:38
青春莫相随 发表于 2024-4-30 21:13
哥,三年级需要修改哪里才能下载,这运行起来下载的是四年级的

第39行
page_url = f"a/sjyw4/list_109_{page_index}.html"
修改成
page_url = f"a/sjyw3/list_108_{page_index}.html"
推荐
desertlove 发表于 2024-5-11 12:30
这多少有点个人恩怨了
109#
wang1609 发表于 2024-5-16 11:04
外甥:老登  欺人太甚
108#
Timothys 发表于 2024-5-15 17:31
先为我那没有上小学的孩子储备着
107#
mcmadm 发表于 2024-5-13 13:45
感谢分享 我给我儿子也弄几套
106#
wuailong 发表于 2024-5-13 13:19
哈哈哈,好东西
105#
amgm 发表于 2024-5-13 11:27
到时候你外甥怕是要第一个抢着拔管子了
104#
ljxc 发表于 2024-5-12 15:28
哈哈哈,有意思,学习了
103#
fsezll 发表于 2024-5-12 15:17
宠上天了
102#
leehoopz 发表于 2024-5-11 17:29
外甥被你玩坏了
101#
jiemo9527 发表于 2024-5-11 14:33
小舅子:你的良心不会痛吗
100#
tcl123 发表于 2024-5-11 14:27
a525 发表于 2024-5-10 19:37
编译错误?没有提示哪一行吗?

有红色的横线的那一行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-5-22 17:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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