0
点赞
收藏
分享

微信扫一扫

python结题报告下载

盖码范 2022-04-21 阅读 80
python

批量下载国家自然科学基金结题报告图片


前言

提示:这里可以添加本文要记录的大概内容:
结题报告作为国家自然科学基金的最终结果,对于搞科研的人来说是很重要的,但是在网页中阅读,总会有一些不方便。本代码实现对单个结题报告的图片爬取。


提示:以下是本篇文章正文内容,下面案例可供参考

一、准备工作

安装python3.8
安装requests(用于向服务器发送请求)
安装json库(用来处理动态数据)
本教程要爬取的图片来自
https://kd.nsfc.gov.cn/finalDetails?id=6f8f63e823a10f36598222c5e93555e6

二、分析网页

进入网页后的界面如下
在这里插入图片描述
点击结题报告全文免费阅读
在这里插入图片描述
跳转进入阅读界面
在这里插入图片描述
点击F12打开开发者工具,点击Network---->Fetch/XHR---->F5刷新,会出现一下界面
在这里插入图片描述
再点击页面右边按钮,图片加载的同时,XHR的请求变多
在这里插入图片描述
双击completeProjectReport请求
在这里插入图片描述
在这里插入图片描述
从第一张图获取requests url: https://kd.nsfc.gov.cn/api/baseQuery/completeProjectReport
以及请求类型post

从第二张图获取获取 id 和 index 两个参数
id其实就是https://kd.nsfc.gov.cn/finalDetails?id=6f8f63e823a10f36598222c5e93555e6后面id的部分

index:表示页数

将结题报告中在线阅读中的第一张图片在新的标签打开,上方地址栏有url:https://kd.nsfc.gov.cn/report/51/da1784340c8eec8121f68e67fc1d9970
这才是图片真正的url,我们就要想办法获得这样的url,获取一张图片的url,其他的图片url就可以利用循环来获取获取。
在这里插入图片描述
在这里插入图片描述
获取下图红色的url信息
在这里插入图片描述

三、实战

1.导入要用得第三方库和请求头

import requests
import json
import requests_cache
headers = {
            'User-Agent': 'xxxxxxxxxxxxxx'
        }

2.发送请求

#初始url
url='https://kd.nsfc.gov.cn/finalDetails?id=6f8f63e823a10f36598222c5e93555e6'
#动态请求时的url
base_url = 'https://kd.nsfc.gov.cn/api/baseQuery/completeProjectReport'
#字符串求片,获取参数id
id=url[-32:]
data={'id': id,'index': 1}
#经过拼接得到新的url:https://kd.nsfc.gov.cn/api/baseQuery/completeProjectReportid=6f8f63e823a10f36598222c5e93555e6&index=1请求
response=requests.post(base_url,data=data,headers=headers)
print(response)

运行效果如下:
在这里插入图片描述

3.json数据获取及处理

res_json=json.loads(response.text)
print(res_json)

运行结果
得到字典类型
{‘code’: 200, ‘message’: None, ‘data’: {‘hasnext’: True, ‘url’: ‘/report/51/da1784340c8eec8121f68e67fc1d9970’}},,,,字典中url的value值为/report/51/da1784340c8eec8121f68e67fc1d9970,,对应第一张图片url:https://kd.nsfc.gov.cn/report/51/da1784340c8eec8121f68e67fc1d9970的后面一部分。
加粗样式
获取url的value值

end_url=res_json.get('data').get('url')
print(end_url)
new_url='https://kd.nsfc.gov.cn/'+end_url
print(new_url)

运行结果
在这里插入图片描述
加循环

for i in range(1,100):
    id=url[-32:]
    data={'id': id,'index': i}
    response=requests.post(base_url,data=data,headers=headers)
    res_json=json.loads(response.text)
    end_url=res_json.get('data').get('url')
    new_url='https://kd.nsfc.gov.cn/'+end_url
    print(new_url)

运行结果,实现对结题报告中所有图片url的获取
在这里插入图片描述

3.数据存储

data=requests.get(new_url).content
with open(f'./image1/{i}.png', 'wb') as f:
    f.write(data)

完整源码

import requests
import json
import requests_cache
headers = {
            'User-Agent': 'xxxxxxxxxxxxxxxxxxx'
        }
url='https://kd.nsfc.gov.cn/finalDetails?id=6f8f63e823a10f36598222c5e93555e6'

base_url = 'https://kd.nsfc.gov.cn/api/baseQuery/completeProjectReport'
#获取参数id
for i in range(1,100):
    id=url[-32:]
    data={'id': id,'index': i}
    response=requests.post(base_url,data=data,headers=headers)
    res_json=json.loads(response.text)
    end_url=res_json.get('data').get('url')
    new_url='https://kd.nsfc.gov.cn/'+end_url
    data=requests.get(new_url).content
    with open(f'./image1/{i}.png', 'wb') as f:
        f.write(data)
       

在这里插入图片描述

四、源码获取

以上就是今天要讲的内容,本文仅仅简单介绍了单个结题报告的图片爬取,本案例还有相关的进阶版可以实现多个结题报告爬取,放在不同的文件夹,同时合并成pdf文件(实现命名)。

编程不易,还望支持
本案例进阶版源码付费后可获得
vx:h10061120

举报

相关推荐

0 条评论