咱们今天通过scrapy来获取国内疫情数据。需求是爬取相应的省市名字、今日新增、累计确诊人数。
一、分析url
二、创建scrapy项目并生成爬虫
三、提取数据
四、保存数据
这是国内疫情数据的网站:
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
打开后页面如下:
可以发现网页源代码中就有咱们想要的数据信息,因此可以直接发起请求。
现在,通过terminal终端创建一个scrapy项目:
scrapy startproject yiqingdata
再创建爬虫文件:
scrapy genspider domestic_yiqing view.inews.qq.com
此时,咱们的scrapy爬虫框架就建好了,接下来进行相应的修改。
点开爬虫文件domestic_yiqing.py,把start_urls改为第一步中确定的url:
为了不让其他信息显示出来干扰数据,在设置中加入如下字段:
LOG_LEVEL = 'WARNING'
如下图:
另外,在setting文件中把ROBOTSTXT_OBEY信息注释掉,以便后续的操作:
import requests
import json # 处理数据
from openpyxl import load_workbook # 保存为表格
在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',
}
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函数中
)
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)
在总目录下添加start.py文件,用于运行爬虫。
start文件代码如下:
from scrapy import cmdline
cmdline.execute(['scrapy','crawl','domestic_yiqing'])
运行后,结果如下:
有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"] = "累计确诊人数"
# 保存到表格的A、B、C列
# 云南
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("保存成功")
保存表格后,结果如下:
至此,咱们成功实现了北京、云南的疫情数据爬取,并对数据进行了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实战之爬取腾讯招聘信息