En écrivant robots d' exploration, pour atteindre l'indice de qualité de l' air site IQA région et la période ont été acquises, et visualiser les données
Procédure:
-
installation Pyspider en
utilisant la ligne de commande installée dans l'anaconda invite:
-
Lorsque vous êtes invité à mettre à niveau, puis suivez les instructions pour effectuer
-
PhantomJS télécharger et configurer les variables d'environnement
peuvent être effectuées dans l'URL suivante pour télécharger
https://phantomjs.org/download.html
5. La ligne de commande début pyspider
la commande figure s'il y a un bon départ
-
Si, version python 3.7 ci - dessus, le déclassement proposé, car il y aura conflit linguistique
dans la ligne de commande, entrez la commande suivante:
PIP WsgiDAV == Uninstall 2.4.1 -
Après un démarrage réussi par adresse par défaut: http: // localhost: 5000 / pour accéder à l'interface Web d'araignée
et cliquez sur le créer un nouveau projet peut créer un nouvel emploi reptile
après la figure que je veux aborder est le crawling d'adresse, remplir les informations cliquez sur Créer -
Peur d'entrer dans une interface écrite du projet:
la gauche est le code interface de débogage, le droit est le résultat de l' exécution du code, cliquez sur la course à exécuter, puis modifiez le code à chaque fois que vous devez enregistrer (enregistrer) -
Collecte des données
Sélectionnez cette option pour explorer l'url
cliquez sur le bouton triangle sur le côté droit
parce que l'URL est ce que nous avons besoin, il est donc nécessaire d'url modifier obtenir des expressions
cliquez sur Activer aide du sélecteur de css, puis cliquez sur les données que vous souhaitez obtenir, vous pouvez générer une expression d'extraction de données de réponse formule:
cliquez sur la flèche peut être inséré dans l'expression résultante où se trouve le curseur, et « div> li> a »
- L' acquisition de données
après la répétition:
ajoutez le code suivant à la méthode index_page self.crawl dans:
fetch_type='js',js_script="""function() {setTimeout("$('.more').click()", 2000);
}"""# 等待浏览器加载数据
Après le stockage, ré -
code généré pyspider la classe Handler nouvelle méthode:
@config(age=10 * 24 * 60 * 60)
def index1_page(self, response):
for each in response.doc('.unstyled1 a').items():
self.crawl(each.attr.href,validate_cert=False,fetch_type='js',js_script="""function() {setTimeout("$('.more').click()", 2000);
}""",callback=self.detail_page)# 代码中的JS为等待浏览器加载数据
Procédé index_page méthode de la valeur callbacke à index1_page.
A cette époque, les liaisons de données résultantes 65 villes en mai.
Sélectionnez le dernier (Avril de données 2019):
- Enregistrer les données
@config(priority=2)
def detail_page(self, response):
import pandas as pd
title_data= response.doc("* tr > th").text()# 获取标签数据
data = response.doc("* > * tr > td").text()# 获取表格内的具体数据
title_list = title_data.split(" ")# 将获取的数据进行分割
data_list = data.split(" ")
data_AQI={}# 新建字典用来存放处理后的数据
for i in range(len(title_list)):# 按照标签进行数据处理
data_AQI[title_list[i]]= data_list[i::9]# 将数据处理为字典形式
data = pd.DataFrame(data_AQI)# 转换成DataFrame格式
data.to_csv("D:\\data.csv",index=False,encoding="GBK")# 路径可以更换为想要存储数据的路径,此处存储至windows本地桌面,windows中的编码格式为GBK。
return
- Visualisation de données
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import pandas as pd
import matplotlib.dates as mdate
import matplotlib.pyplot as plt
from pylab import mpl
from datetime import datetime
plt.style.use("seaborn-whitegrid")
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 设置matplotlib字体,解决中文显示问题
def visualization_mat(filename):
data = pd.read_csv(filename, encoding="GBK")
# 创建画布,返回figure,axes两个元组 赋予fig,axes,并创建了两行一列的两个子图 一般只用到axes
fig, axes = plt.subplots(nrows=2, ncols=1, dpi=80,figsize=(8,6))
# 质量等级使用饼图展示
level = list(data["质量等级"]) # 简单的数据处理,选取饼图的标签
level_name = list(set(level))
#饼状图需要导入的是:plt.pie(x, labels= )
axes[0].pie([level.count(i) for i in level_name],labels=level_name,
autopct="%1.2f%%",colors=["r", "g", "b","y"]) # 设置饼图的相关属性
ts =[datetime.strptime(i, '%Y-%m-%d') for i in data["日期"]]
# PM数据使用折线图展示
axes[1].plot(ts,data["NO2"])
axes[1].plot(ts,data["O3_8h"])
axes[1].plot(ts,data["AQI"])
axes[1].xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))#设置时间标签显示格式
axes[1].set_xticks([datetime.strptime(i, '%Y-%m-%d').date() for i in data["日期"]])
axes[1].set_xlabel("时间") # 为坐标轴设置标签
axes[1].set_ylabel("数值")
axes[1].legend()
plt.gcf().autofmt_xdate()# 日期自动旋转
# plt.savefig(filename+’.jpg’)# 保存图片
plt.show() #展示图像
visualization_mat ("D:\\ data.csv")