GB标准文档爬虫下载程序

本文档介绍了一种使用爬虫下载GB标准文件的方法。首先分析网站结构,通过F12开发工具研究请求,发现内容在HTML中。接着确定直接请求页面并解析HTML的方案。实现了获取文件列表、下载链接及下载文件的函数,处理了中文乱码和特殊字符问题,采用分块下载以应对大文件和网络延迟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

近期想下载几篇软件测试方面的国标文件,找了好久找了一个网站https://0ppt.com
不过发现这个网站的国标文件的搜索好像不能用,没办法就想着直接用爬的方法吧。

思路

分析网站结构

F12开发工具分析请求

本以为页面上会有接口来返回数据,但找了半天发现什么包含内容的接口都没有,最后通过定位页面元素发现想要的信息就在html内容里。

确定方案

既然内容就在html内容中,那直接请求对应页面的地址拿到返回即可,再去分析页面中想要的内容。

具体实现

先导入必要模块
import requests  --主要是请求关键数据
import re  --主要用来匹配关键信息
from time import sleep  -- 本想是防止爬的太快
from bs4 import BeautifulSoup  -- 本来想通过BS4来获取信息的,最后发现还没正则来的方便
import shelve  --主要是做本地缓存,方便重试的时候快速跳过已经处理的数据
构造请求headers

主要是爬网站直接拒绝请求了,最后发现网站不用登录,也没有做任何限制,实际是可以不用要的,这里构造这个json是用的大模型帮忙生成的,相当nice。

headers = {
   
  "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
  # "Accept-Encoding": "gzip, deflate, br, zstd",
  "Accept-Language": "zh-CN,zh;q=0.9",
  "Connection": "keep-alive",
  "Cookie": "HMACCOUNT_BFESS=D1D8258E03E0A558; BDUSS_BFESS=dKNzJKaFhQQWFvcEpSZG9oRE5YR0Zod1l-VHE3ZVFLfnJTZWNJT3JKbGdiT3BsRVFBQUFBJCQAAAAAAAAAAAEAAAB~qcIBZmxvd2ludGhlcml2ZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDfwmVg38JlMT; H_WISE_SIDS_BFESS=40008_40206_40212_40215_40080_40364_40352_40367_40374_40401_40311_40301_40467_40461_40471_40456_40317; BAIDUID_BFESS=A6E2AF276F85EFFB50804B65078FB44D:FG=1; ZFY=hyR2bKIUFoz76hVFPIVRUUHYScV4SOFL0yQP0ASJu4k:C",
  # "Host": "hm.baidu.com",
  "Referer": "https://0ppt.com/",
  # "Sec-Ch-Ua": "\"Chromium\";v=\"124\", \"Microsoft Edge\";v=\"124\", \"Not-A.Brand\";v=\"99\"",
  # "Sec-Ch-Ua-Mobile": "?0",
  # "Sec-Ch-Ua-Platform": "\"Windows\"",
  # "Sec-Fetch-Dest": "image",
  # "Sec-Fetch-Mode": "no-cors",
  # "Sec-Fetch-Site": "cross-site",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
实现获取文件列表的方法
  • 这里的正则匹配其实比较简单,直接找到想要的内容区域,然后把自己想要的内容做好匹配;

  • 在实际返回数据中发现中文都是乱码,这里用到了关键的一步: res.encoding = 'GBK' 在返回的结果中,手动复制给其encoding方法赋值GBK,这里最初尝试的‘utf-8’发现不行,换成GBK就可以了。

  • 为什么做了两种匹配,主要是网站写的不够规范,出现了两种结构的内容,需要都进行匹配。

def getcontent_list(html):
    res = requests.get(html,headers=headers)
    res.encoding = 'GBK'
    html_content= res.text

    # print(html_content)

    repat = re.compile(r'<a href="(https.+?)".*?title="(.*?)">.*?</a>')
    repat1 = re.compile(r'<a href="(https.+?)".*?target="_blank"&g
### 关于家用电器国家标准 GB4706 的概述 GB 4706 是中国针对家用和类似用途电器的安全标准体系,其全称为《家用和类似用途电器的安全》。该系列标准旨在规定各类家电产品在设计、制造过程中需满足的基本安全要求,以保护消费者的人身财产安全[^1]。 #### GB4706的标准结构 GB 4706 系列由通用部分(General Requirements)和特定类型的设备专用部分组成。其中: - **通用部分**:适用于所有家用电器的基础安全要求。 - **专用部分**:针对具体类别产品的特殊需求制定补充条款,例如空调器适用 GB 4706.32,电冰箱适用 GB 4706.13 等。 这些标准覆盖的内容包括但不限于电气绝缘性能测试方法、温升限值设定以及机械强度评估等方面的技术指标说明[^2]。 #### 如何获取GB4706 PDF文档? 对于正式版本的下载途径而言,可以通过以下渠道合法获得最新版PDF文件: 1. 访问全国标准化信息公共服务平台网站,在搜索框输入相应编号即可找到对应资源链接; 2. 购买纸质或电子副本可通过中国质量标准出版传媒有限公司官方商城实现交易操作; 值得注意的是,由于版权保护原因,非授权传播可能违反法律法规相关规定,因此建议通过正规渠道取得所需资料[^3]。 ```python import requests from bs4 import BeautifulSoup def fetch_standard_info(standard_id): url = f"https://www.sac.gov.cn/search/{standard_id}" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') title = soup.find('h1').text.strip() description = soup.select_one('.description p').text.strip() return {"title": title, "description": description} info = fetch_standard_info("GB4706") print(info["title"], info["description"]) ``` 上述脚本展示了一个简单的Python程序用于抓取指定国标的元数据信息作为示例演示如何利用编程手段辅助查找目标文献详情(仅作学习交流之用,请勿滥用爬虫技术干扰正常业务运行)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值