前言
经过一系列的测试,技术的可行性,这里最终定稿,开始搞爬虫部分,用来爬取数据。
1.MongoDB数据库 这里数据库最终还是敲定了MongoDB,这里先讲一下选择该数据库的原因,随着人工智能和大数据发展,关系型数据库已然很难满足处理海量数据的要求,这里需要一种结构更加简单,并发量更简单并且支持分布式系统的数据库。 MongoDB是一个面向文档存储的非关系性数据库,基于C 开发,该数据库将数据存储为一个文档. 数据结构由“键/值”对(key=>value)组成,字段值可以包含其他文档,数组及文档数组,类似于Json对象,如保存一本书的信息,格式如下:
代码语言:javascript复制{
"name":"Scrapy网络爬虫",
"description":"世荣是个爬虫爱好者",
"author":["世荣","小李"],
"price":59
}
这里对比一下SQL和MongoDB的术语不同之处:
安装好之后,把测试好的代码先跑一遍。
2.代码测试
代码语言:javascript复制import re
import requests
import json
from pymongo import MongoClient
class crawler():
def __init__(self):
# 入口url
self.start_url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
# 构造响应头
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
}
# 初始化MongoDB数据库连接
self.client = MongoClient()
self.collection = self.client['test']['covid_19']
# 请求数据并解析
def parse(self,url):
rest = requests.get(url, headers=self.headers)
return rest.content.decode()
# 获取数据
def get_content_list(self,str_html):
json_html = json.loads(str_html)
# 获取data对应的数据
data = json_html['data']
# 由于data对应的数据是字符串的json数据因此需要进步转换成json数据
json_data = json.loads(data)
# 按照省进行分组
province_list = json_data['areaTree'][0]['children']
# 遍历省 获取没个省下的区域数据
for province in province_list:
# 按照区域进行分组
area_list = province['children']
for area in area_list:
item = {}
item['省'] = province['name']
item['市'] = area['name']
item['现有确诊'] = area['total']['nowConfirm']
item['累计确诊'] = area['total']['confirm']
item['治愈人数'] = area['total']['heal']
item['治愈率'] = area['total']['healRate']
item['死亡人数'] = area['total']['dead']
item['死亡率'] = area['total']['deadRate']
print(item)
self.save(item)
# 保存数据
def save(self,item):
self.collection.insert(item)
# 主函数
def run(self):
str_html = self.parse(self.start_url)
self.get_content_list(str_html)
if __name__ == '__main__':
covid = crawler()
covid.run()