Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据

咱们今天通过scrapy来获取国内疫情数据。需求是爬取相应的省市名字、今日新增、累计确诊人数。

一、分析url
二、创建scrapy项目并生成爬虫
三、提取数据
四、保存数据

一、分析url

这是国内疫情数据的网站:

url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'

打开后页面如下:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第1张图片
可以发现网页源代码中就有咱们想要的数据信息,因此可以直接发起请求。

二、创建scrapy项目并生成爬虫

现在,通过terminal终端创建一个scrapy项目
scrapy startproject yiqingdata

再创建爬虫文件:
scrapy genspider domestic_yiqing view.inews.qq.com
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第2张图片
此时,咱们的scrapy爬虫框架就建好了,接下来进行相应的修改

点开爬虫文件domestic_yiqing.py,把start_urls改为第一步中确定的url:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第3张图片

三、提取数据

1.对setting文件进行设置

为了不让其他信息显示出来干扰数据,在设置中加入如下字段:

LOG_LEVEL = 'WARNING'

如下图:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第4张图片
另外,在setting文件中把ROBOTSTXT_OBEY信息注释掉,以便后续的操作:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第5张图片

2.对解析函数parse()进行定义

2.1 导入相应的第三方库

import requests
import json   # 处理数据
from openpyxl import load_workbook    # 保存为表格

2.2 添加请求头

在settings文件中,将请求头的信息加进去:

DEFAULT_REQUEST_HEADERS = {
     
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
  'Accept-Language': 'en',
}

如图所示:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第6张图片

2.3 发起请求获取数据(第一个解析函数)

class DomesticYiqingSpider(scrapy.Spider):
    name = 'domestic_yiqing'
    allowed_domains = ['view.inews.qq.com']
    start_urls = ['https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5']

    def parse(self, response):    # 第一个解析函数

        url = self.start_urls[0]

        yield scrapy.Request(
            url=url,
            callback=self.parse_one     # 响应结果回调到parse_one函数中
            )

2.4 获取需求数据(第二个解析函数)

    def parse_one(self,response):
    
		# 得到国内的总体数据
        result = json.loads(json.loads(response.text)['data'])['areaTree']
		
		# 得到国内各省市的子数据(这里以云南为例)
        data = result[0]['children']
        for i in data:
            if i['name'] == '云南':
                data1 = i

                # 获取市区名字、今日新增人数、累计确诊人数
                name_yunnan = []
                total_yunnan = []
                new_yunnan = []
                for j in data1['children']:
                    name_yunnan = name_yunnan + [j['name']]
                    total_yunnan = total_yunnan + [j['total']]
                    new_yunnan = new_yunnan + [j['today']]

                today_yn = []
                for item in new_yunnan:
                    today_yn = today_yn + [item['confirm']]

                total_yn = []
                for item in total_yunnan:
                    total_yn = total_yn + [item['confirm']]
                
                print(data1['children'])    # 云南省的各市区信息
                print(len(data1['children']))   # 云南省有几条信息
                print(name_yunnan)         
        		print(today_yn)            
        		print(total_yn)   

3.运行爬虫

在总目录下添加start.py文件,用于运行爬虫。

start文件代码如下:

from scrapy import cmdline

cmdline.execute(['scrapy','crawl','domestic_yiqing'])

运行后,结果如下:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第7张图片
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第8张图片
有15条信息,对应着云南省各市区名字、当日新增人数、累计确诊人数。

同理,可以得到北京的各区名字、当日新增人数、累计确诊人数。

其中,后面3条是我们想要的数据,已经获取到了。

四、保存数据

这一步,咱们将之前获取到的数据,保存到excel表格中。

workbook = load_workbook(filename = r"C:\Users\dell\Desktop\疫情数据.xlsx")

sheet = workbook.active

sheet["A1"] = "市区名字"
sheet["B1"] = "今日新增人数"
sheet["C1"] = "累计确诊人数"
sheet["E1"] = "市区名字"
sheet["F1"] = "今日新增人数"
sheet["G1"] = "累计确诊人数"

     
# 保存到表格的ABC列
# 云南
j = 2
while j <= 16:
    sheet["A%d"% j] = name_yunnan[j - 2]
    sheet["B%d"% j] = today_yn[j - 2]
    sheet["C%d"% j] = total_yn[j - 2]
    j += 1
    
# 北京
k = 2
while k <= 19:
    sheet["E%d" % k] = name_beijing[k - 2]
    sheet["F%d" % k] = today_bj[k - 2]
    sheet["G%d" % k] = total_bj[k - 2]
    k += 1
    
workbook.save(filename=r"C:\Users\dell\Desktop\疫情数据.xlsx")
print("保存成功")

保存表格后,结果如下:
Python爬虫进阶(九)——爬虫Scrapy实战之获取国内疫情数据_第9张图片
至此,咱们成功实现了北京、云南的疫情数据爬取,并对数据进行了excel操作保存。今天的实战操作就到这里了。

 
 
 
实战部分
第一篇:Python爬虫实战之 爬取全国理工类大学数量+数据可视化
第二篇:Python爬虫实战之 爬取王者荣耀皮肤

爬虫基础部分
第一篇:Python的要点(搭建环境、安装配置、第三方库导入方法详细过程)
第二篇:Python爬虫初探(一)——了解爬虫
第三篇:Python爬虫初探(二)——爬虫的请求模块
第四篇:Python爬虫初探(三)——爬虫之正则表达式介绍
第五篇:Python爬虫初探(四)——爬虫之正则表达式实战(爬取图片)
第六篇:Python爬虫初探(五)——爬虫之xpath与lxml库的使用
第七篇:Python爬虫初探(六)——爬虫之xpath实战(爬取高考分数线信息)
第八篇:Python爬虫初探(七)——爬虫之Beautifulsoup4介绍(Ⅰ)
第九篇:Python爬虫初探(八)——爬虫之Beautifulsoup4介绍(Ⅱ)
第十篇:Python爬虫初探(九)——爬虫之Beautifulsoup4实战(爬取豆瓣信息)
第十一篇:Python爬虫初探(十)——爬虫总结

爬虫进阶部分
第一篇:Python爬虫进阶(一)——爬虫之动态数据与selenium
第二篇:Python爬虫进阶(二)——爬虫之多任务模块(Ⅰ)
第三篇:Python爬虫进阶(三)——爬虫之多任务模块(Ⅱ)
第四篇:Python爬虫进阶(四)——爬虫之多任务模块(Ⅲ)
第五篇:Python爬虫进阶(五)——爬虫之多线程爬虫实战(爬取王者荣耀皮肤)
第六篇:Python爬虫进阶(六)——爬虫之Scrapy初探(Ⅰ)
第七篇:Python爬虫进阶(七)——爬虫之Scrapy初探(Ⅱ)
第八篇:Python爬虫进阶(八)——爬虫Scrapy实战之爬取腾讯招聘信息

你可能感兴趣的:(python,爬虫,python,excel)