IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 二战《中国作物种质信息网》“异步协程“ 优化 -> 正文阅读

[Python知识库]二战《中国作物种质信息网》“异步协程“ 优化

二战《中国作物种质信息网》异步协程优化

一战:多线程

更多内容请参考一战《中国作物种质信息网》(再也不怕没有小麦数据源了)

二战:异步协程

执着的小猪,我又回来了

定义协程:需要在方法前加上 async

同时需要安装 asyncio & aiohttp

pip install asyncio -i 清华镜像
# 爬取小麦数据,使用异步协程提高效率
# MY0:14400
"""
action: item
p: MY014200
croptype: ["粮食作物", "小麦"]
_:
"""
'''
Referer: https://www.cgris.net/query/do.php
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4542.2 Safari/537.36
'''

import csv
import asyncio
import aiohttp


# 设置表头
fieldnames = ['库编号', '统一编号', '保存单位', '品种名称', '译名', '科名', '属名', '学名', '系谱', '育成年限', '原产地', '高程', '东经', '北纬', '来源国',
              '芒', '壳色', '粒色', '冬春性', '成熟期', '穗粒数', '穗长', '株高', '千粒重', '粗蛋白', '赖氨酸', '沉淀值', '硬度', '容重', '抗旱性',
              '耐涝性', '芽期耐盐', '苗期耐盐', '田间抗寒性', '人工抗寒性', '条锈严重度', '条锈反应型', '条锈普遍率', '叶锈严重度', '叶锈反应型', '叶锈普遍率',
              '秆锈严重度', '秆锈反应型', '秆锈普遍率', '白粉严重度', '白粉反应型', '黄矮病', '赤霉病病穗', '赤霉病病指', '赤霉病指数', '赤霉病抗性', '根腐叶病级',
              '根腐穗病级', '其它', '省', '样品类型']

# 获取csv文件
file = open('./wheat.csv', mode='a', encoding='utf-8', newline='')
# 建立一个字典写入对象,并指定列名fieldnames
csvWriter = csv.DictWriter(file, fieldnames=fieldnames)
# 写入表头
csvWriter.writeheader()

# 获取一页的小麦数据
async def getData(url, index, session):
    # 请求头
    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4542.2 Safari/537.36',
            'Referer': url  # 防盗链
    }

    data = {
        'action': 'item',
        'p': f'MY0{index}',
        'croptype': '["粮食作物", "小麦"]',
    }
    # 获取异步requests
    async with session.post(url, headers=headers, data=data) as resp:
        # 写入数据
        csvWriter.writerow(await resp.json(content_type='text/html', encoding='utf-8'))  # 读取内容是异步的,需要挂起
        print('库编号', data['p'], '爬取完毕!')

    # # 获取post请求对象
    # resp = requests.post(url, headers=headers, data=data)
    #
    # # 写入数据
    # csvWriter.writerow(resp.json())
    # print('库编号', data['p'], '爬取完毕!')

async def main():
    # 访问地址
    url = 'https://www.cgris.net/query/o.php'

    # 获取异步requests
    async with aiohttp.ClientSession() as session:
        tasks = []
        for i in range(1482, 1520):
            tasks.append(asyncio.create_task(getData(url=url, index='%05d'%i, session=session)))
        await asyncio.wait(tasks)


if __name__ == '__main__':
    # run协程
    asyncio.run(main())

    # 关闭文件流
    file.close()

在这里插入图片描述

速度提升了!但是不是最优解。期待下次王者回归!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:43:09  更:2021-07-23 10:43:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 11:22:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码