博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python多线程爬取海外新型肺炎每日实时更新数据!
阅读量:3961 次
发布时间:2019-05-24

本文共 3000 字,大约阅读时间需要 10 分钟。

Python多线程爬取海外新型肺炎每日实时更新新数据,并存入本地csv文件!

1. 爬取的内容。

网址:
内容:
在这里插入图片描述

2. 分析网页

观察网页发现,后台的数据是通过AJAX传递过来的,每一个国家的数据都在一个url里面的,再观察各国的url是相似的,只有一个请求参数不同,所以通过这个参数的改变可以请求到各国的疫情统计情况。
在这里插入图片描述
3. 编写业务代码
因为请求过来的数据是josn类型,只需简单的字段处理就行了。

# -*- coding: utf-8 -*-#@Project filename:PythonDemo  Virus.py#@IDE   :IntelliJ IDEA#@Author :ganxiang#@Date   :2020/04/01 0001 13:09import requestsimport csvfrom urllib.parse import quote#用来解决url中文编码from concurrent.futures import ThreadPoolExecutor,wait,ALL_COMPLETEDimport timedef parse(url,country):    headers = {
'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"} res =requests.get(url,headers).json() head =['date','confirm_add','confirm','heal','dead'] with open("./SaveData/Virus/{}.csv".format(country),"w",newline="",encoding="gb18030") as f: write =csv.DictWriter(f,head) write.writeheader() for data in res['data']: write.writerow(data)def run(): #1,使用多线程获取数据 t1 =time.time() countrys =['美国','意大利','西班牙','德国','法国','伊朗','英国','瑞士','土耳其','比利时','荷兰','奥地利','韩国','加拿大','葡萄牙', '巴西','以色列','挪威','澳大利亚','瑞典','捷克','爱尔兰','丹麦','马来西亚','智利','俄罗斯','波兰','厄瓜多尔','罗马尼亚', '日本','卢森堡','菲律宾','巴基斯坦','泰国','沙特阿拉伯','印度尼西亚','芬兰','印度','南非','希腊','墨西哥','巴拿马','冰岛', '多米尼加','秘鲁','阿根廷','新加坡','哥伦比亚','塞尔维亚','克罗地亚','斯洛文尼亚','卡塔尔','爱沙尼亚','阿尔及利亚','钻石号邮轮', '埃及','新西兰','伊拉克','阿联酋','乌克兰','摩洛哥','巴林','立陶宛','亚美尼亚','匈利亚','黎巴嫩','波黑','保加利亚','拉脱维亚', '突尼斯','安道尔','斯洛伐克','摩尔多瓦','哈沙克斯坦','哥斯达黎加','乌拉圭','北马其顿','阿塞拜疆','科威特','约旦','塞浦路斯', '布基纳法索','圣马力诺','越南'] executor =ThreadPoolExecutor(max_workers=5)#设置线程个数 tasks =[executor.submit(parse,'https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country={}&'.format(quote(country)), country)for country in countrys] wait(tasks, return_when=ALL_COMPLETED)# 等待所有的线程完成,才进入后续的执行 t2 =time.time() print("爬取完成,使用线程的执行时间为:",t2-t1)#爬取完成,使用线程的执行时间为: 11.562765836715698 #2,不使用多线程获取数据 # t1 =time.time() # countrys =['美国','意大利','西班牙','德国','法国','伊朗','英国','瑞士','土耳其','比利时','荷兰','奥地利','韩国','加拿大','葡萄牙', # '巴西','以色列','挪威','澳大利亚','瑞典','捷克','爱尔兰','丹麦','马来西亚','智利','俄罗斯','波兰','厄瓜多尔','罗马尼亚', # '日本','卢森堡','菲律宾','巴基斯坦','泰国','沙特阿拉伯','印度尼西亚','芬兰','印度','南非','希腊','墨西哥','巴拿马','冰岛', # '多米尼加','秘鲁','阿根廷','新加坡','哥伦比亚','塞尔维亚','克罗地亚','斯洛文尼亚','卡塔尔','爱沙尼亚','阿尔及利亚','钻石号邮轮', # '埃及','新西兰','伊拉克','阿联酋','乌克兰','摩洛哥','巴林','立陶宛','亚美尼亚','匈利亚','黎巴嫩','波黑','保加利亚','拉脱维亚', # '突尼斯','安道尔','斯洛伐克','摩尔多瓦','哈沙克斯坦','哥斯达黎加','乌拉圭','北马其顿','阿塞拜疆','科威特','约旦','塞浦路斯', # '布基纳法索','圣马力诺','越南'] # for country in countrys: # url ='https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country={}&'.format(quote(country)) # print(url) # parse(url,country) # t2 =time.time() # print("爬取完成,不使用线程的执行时间为:",t2-t1)#使用线程的执行时间为: 55.894751310348511if __name__ =='__main__': run()

4. 运行展示

在这里插入图片描述
5.部分数据展示
在这里插入图片描述
在这里插入图片描述

转载地址:http://ueqzi.baihongyu.com/

你可能感兴趣的文章
安装zabbix 3.4版本编译报错configure: error: Unable to use libevent (libevent check failed) 解决办法
查看>>
一行代码更改密码
查看>>
非插件实现cookie版Typecho文章阅读次数统计功能
查看>>
非插件实现Typecho语法高亮
查看>>
windows 下 netsh 实现 端口映射(端口转发)
查看>>
两个好用的命令行工具 watch 和 rsync
查看>>
信安入门神级书单
查看>>
【IPFS指南】IPFS的竞争对手们(一)
查看>>
docker更换国内镜像
查看>>
CentOS 下 tree命令用法详解
查看>>
docker上传镜像至Registry时https报错解决方法
查看>>
安装 docker-compose (实测可用,妈妈再也不用担心被墙了)
查看>>
docker下删除none的images
查看>>
Linux提权获取敏感信息方法
查看>>
Ubuntu 16.04开机A start job is running for Raise network interface(5min 4s)解决方法
查看>>
Ubuntu 16.04开机隐藏菜单缩短时间
查看>>
Ubuntu 更换国内源
查看>>
Ubuntu16.04下Docker pull connection refused 解决办法
查看>>
通过 三大机制 揭秘 IPFS 工作原理
查看>>
Ubuntu 16.04卸载PostgresQL
查看>>