吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1258|回复: 15
收起左侧

[Python 原创] 行标网站文件下载

[复制链接]
pk555157815 发表于 2024-4-30 19:53
本帖最后由 pk555157815 于 2024-5-15 22:25 编辑

适用于“行业标准信息服务平台”网站文件下载

https://hbba.sacinfo.org.cn/
注:由于该网站部分文件只能预览,无法下载,利用python写了此工具。
欢迎各位大佬交流指点。


[Python] 纯文本查看 复制代码
# coding=utf-8
import os
import argparse
import requests, shutil
import PIL.Image as pimg
from lxml import etree

def mk_tmp():
    '''
    创建临时文件夹
    :return:
    '''
    try:
        os.mkdir('temp')
    except:
        shutil.rmtree('temp', True)
        os.mkdir('temp')



def main_process(file_id,pic_index=0):
    mk_tmp()
    while True:
        db_web = f'https://hbba.sacinfo.org.cn/hbba_onlineRead_page/{file_id}/{pic_index}.png'
        r = requests.get(db_web, headers=headers)
        print(f'page:{pic_index},status:{r.status_code}')
        if r.status_code == 404:
            print('complete!')
            break
        else:
            with open('./temp/' +  f'{pic_index}.png', 'wb') as f:
                f.write(r.content)
            pic_index += 1

def get_filename(file_id):
    name_web = f'https://hbba.sacinfo.org.cn/stdDetail/{file_id}'
    r = requests.get(name_web, headers=headers)
    html_element = etree.HTML(r.text)
    xpath_filename = '//h4/text()'
    filename = html_element.xpath(xpath_filename)[0].strip('\r\n\t')
    print(filename)
    return filename

if __name__ == '__main__':
    file_id = 'e99f8d17284a5e920923b11911b2f0b1df9ca7e1b6d177b9a7e71ba5390bf573'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46'
    }
    parser = argparse.ArgumentParser(description="Download DB file with file_id on the website")
    parser.add_argument('-f', '--file_id', type=str, help='file_id',required=True)
    parser.add_argument('-p','--pic_index', type=int, help='pic_index',default=0)
    args = parser.parse_args()
    filename = get_filename(args.file_id)
    main_process(args.file_id,args.pic_index)
    sources = []
    file_list = os.listdir('./temp')
    sources = [pimg.open(f'./temp/{i}.png') for i in range(len(file_list))]
    sources[0].save(f'./{filename}.pdf', 'pdf', save_all=True, append_images=sources[1:])




## 使用方法
1.获取文件file_id

获取file_id

获取file_id

2.命令行使用方法
2.png
-h 显示方法使用帮助
-f 后跟file_id
-p 后跟pic_index(下载起始页,默认为0,可缺省)
3.下载文件
3.png
4.最终输出结果为文件名.pdf,输出路径为python文件同级目录。


有类似需求的各位,可以看看我写的另外一篇下载GB文件的思路分享,如果有帮助的话请大家投投币来点免费的热心,谢谢{:300_957:}
GB官方网页在线预览文件下载思路
https://www.52pojie.cn/thread-1729810-1-1.html
(出处: 吾爱破解论坛)

免费评分

参与人数 4吾爱币 +11 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
杀神灭佛 + 1 谢谢@Thanks!
qubonn + 1 + 1 多谢慷慨分享自创独门利器!
py学徒 + 2 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

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

cick 发表于 2024-5-15 16:36
本帖最后由 cick 于 2024-5-15 16:51 编辑

[Python] 纯文本查看 复制代码
import os
import platform
import subprocess
import requests
import shutil
import PIL.Image as pimg
from lxml import etree
import PySimpleGUI as sg

def mk_tmp():
    '''
    Create a temporary folder
    '''
    try:
        os.mkdir('temp')
    except:
        shutil.rmtree('temp', True)
        os.mkdir('temp')

def main_process(file_id, pic_index=0):
    mk_tmp()
    while True:
        db_web = f'https://hbba.sacinfo.org.cn/hbba_onlineRead_page/{file_id}/{pic_index}.png'
        r = requests.get(db_web, headers=headers)
        print(f'page:{pic_index},status:{r.status_code}')
        if r.status_code == 404:
            print('complete!')
            break
        else:
            with open('./temp/' + f'{pic_index}.png', 'wb') as f:
                f.write(r.content)
            pic_index += 1

def get_filename(file_id):
    name_web = f'https://hbba.sacinfo.org.cn/stdDetail/{file_id}'
    r = requests.get(name_web, headers=headers)
    html_element = etree.HTML(r.text)
    xpath_filename = '//h4/text()'
    filename = html_element.xpath(xpath_filename)[0].strip('\r\n\t')
    print(filename)
    return filename

def open_folder(folder_path):
    system = platform.system()
    if system == "Windows":
        subprocess.Popen(['explorer', folder_path])
    elif system == "Darwin":
        subprocess.Popen(['open', folder_path])
    else:
        subprocess.Popen(['xdg-open', folder_path])

if __name__ == '__main__':
    sg.theme('SystemDefault')
    layout = [
        [sg.Text('Enter File ID:'), sg.InputText(key='file_id')],
        [sg.Button('Download'), sg.Button('Exit')]
    ]

    window = sg.Window('Download Tool', layout)

    while True:
        event, values = window.read()

        if event == sg.WINDOW_CLOSED or event == 'Exit':
            break
        elif event == 'Download':
            file_id = values['file_id']
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46'
            }
            filename = get_filename(file_id)
            main_process(file_id)
            sources = []
            file_list = os.listdir('./temp')
            sources = [pimg.open(f'./temp/{i}.png') for i in range(len(file_list))]
            sources[0].save(f'./{filename}.pdf', 'pdf', save_all=True, append_images=sources[1:])
            sg.popup('Download completed!')
            open_folder(os.path.abspath('.'))
            break

    window.close()
因为我是mac环境,所以改成用命令行来执行还是不太方便,然后GPT修改之后代码如下
[Python] 纯文本查看 复制代码
import os

import requests import shutil import PIL.Image as pimg from lxml import etree

def mk_tmp(): ''' Create a temporary folder ''' try: os.mkdir('temp') except: shutil.rmtree('temp', True) os.mkdir('temp')

def main_process(file_id, pic_index=0): mk_tmp() while True: db_web = f'https://hbba.sacinfo.org.cn/hbba_onlineRead_page/{file_id}/{pic_index}.png' r = requests.get(db_web, headers=headers) print(f'page:{pic_index},status:{r.status_code}') if r.status_code == 404: print('complete!') break else: with open('./temp/' + f'{pic_index}.png', 'wb') as f: f.write(r.content) pic_index += 1

def get_filename(file_id): name_web = f'https://hbba.sacinfo.org.cn/stdDetail/{file_id}' r = requests.get(name_web, headers=headers) html_element = etree.HTML(r.text) xpath_filename = '//h4/text()' filename = html_element.xpath(xpath_filename)[zxsq-anti-bbcode-0].strip('\r\n\t') print(filename) return filename

if name == 'main': file_id = input("Enter the file ID: ") # Take file ID input from the user headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46' } filename = get_filename(file_id) main_process(file_id) sources = [] file_list = os.listdir('./temp') sources = [pimg.open(f'./temp/{i}.png') for i in range(len(file_list))] sources[zxsq-anti-bbcode-0].save(f'./{filename}.pdf', 'pdf', save_all=True, append_images=sources[1:])





然后直接输入文章对应的file_id就可以下载了。前提是有py环境,打包的我一会试试。



第二版,改了下,直接有弹窗

效果如下








这是修改的第二个方式效果如下
2233.png
3344.png
cick 发表于 2024-5-15 17:45
cick 发表于 2024-5-15 16:36
[mw_shl_code=python,true]import os
import platform
import subprocess

貌似mac打包exe有点问题,大家还是用第一版的,第二版可能是我本地环境问题,等学会了打包exe我在传一个
小众资源 发表于 2024-5-22 20:43
本帖最后由 小众资源 于 2024-5-22 21:09 编辑

写了个易语言版的,在此提供易语言源码
2.jpg


提供了详细的源文件,完备的功能实现了
加个循环就能实现批量,需要的下载研究吧!

易语言源码 - 行业标准网下载.rar (51.18 KB, 下载次数: 10)

免费评分

参与人数 1吾爱币 +1 收起 理由
pk555157815 + 1 用心讨论,共获提升!

查看全部评分

ZhjhJZ 发表于 2024-4-30 21:48
大佬,做个软件吧
lemonatalk952 发表于 2024-5-1 08:26
暂时不用,先收藏
Qim626 发表于 2024-5-1 08:37
Python 写的很好,实用。
wpdzdx 发表于 2024-5-1 08:43
工具很好 可是小白不会用呀 在什么平台下能使用
ztgzs 发表于 2024-5-1 08:52
感谢分享   很实用
howyouxiu 发表于 2024-5-1 09:23
感谢分享,网站拿走了
 楼主| pk555157815 发表于 2024-5-2 21:55
wpdzdx 发表于 2024-5-1 08:43
工具很好 可是小白不会用呀 在什么平台下能使用

安装python3.0以上版本,通过pip工具安装 lxml,PIL库,即可使用啦
 楼主| pk555157815 发表于 2024-5-2 21:56
ZhjhJZ 发表于 2024-4-30 21:48
大佬,做个软件吧

小工具打包反而挺麻烦的,直接安装python3.0以上版本,通过pip工具安装 lxml,PIL库,即可使用啦
wpdzdx 发表于 2024-5-3 09:47
pk555157815 发表于 2024-5-2 21:55
安装python3.0以上版本,通过pip工具安装 lxml,PIL库,即可使用啦

好的 谢谢 我下载来试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 14:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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