Reptile project combat 15: rastreo de información meteorológica

objetivos

Rastrear la información meteorológica y guardar los datos en la base de datos.

Preparación del proyecto

Software: biblioteca de
terceros Pycharm : solicitudes, pymysql,
interfaz de API BeautifulSoup : http://wthrcdn.etouch.cn/WeatherApi?city=city name

Análisis de proyectos

Visite la interfaz de la API meteorológica
aquí para ver la información meteorológica de Suzhou,
así que modifique la API de esta manera

http://wthrcdn.etouch.cn/WeatherApi?city=Suzhou

Inserte la descripción de la imagen aquí
Se puede acceder a ok
Hay mucha información aquí, así que solo rastrea una parte como prueba.

Código

import requests
from bs4 import BeautifulSoup
print('请输入城市名称:')
cityname=input()
url='http://wthrcdn.etouch.cn/WeatherApi?city={}'.format(cityname)

response=requests.get(url)
content=response.text
soup=BeautifulSoup(content,'lxml')
#日期
date=[]
target=soup.find_all('date')
for each in target:
    date.append(each.text)
#最高温度
high=[]
target=soup.find_all('high')
for each in target:
    high.append(each.text)
#最低温度
low=[]
target=soup.find_all('low')
for each in target:
    low.append(each.text)
#light
light=[]
target=soup.find_all('day')
for each in target:
    light.append(each.text)

#night
night=[]
target=soup.find_all('night')
for each in target:
    night.append(each.text)

Imprimirlo

length=len(date)
for i in range(length):
    print(date[i],high[i],low[i],light[i],night[i])

Inserte la descripción de la imagen aquí
De acuerdo, el rastreo se completó

Conectarse a la base de datos

Aquí, MySQL se usa para
crear primero una base de datos,
Inserte la descripción de la imagen aquí
crear una tabla
Inserte la descripción de la imagen aquí
1. Importar el módulo
导入第三方库:import pymysql

2. Conéctese a la base de datos

# 连接database
database = pymysql.connect(
    host="主机名",#localhost
    port="端口",#默认应该是3306,注意这里不加引号
    user ="用户名",#mysql的用户名
    password ="密码",#设置的密码
    database ='数据库名',#使用的数据库名
    charset ='utf8')#指定为utf-8编码格式

3. Crea un objeto de cursor

cursor = database.cursor()  # 执行完毕返回的结果集默认以元组显示

4. Defina la declaración SQL que se ejecutará

sql = "INSERT INTO weather(日期,最高温度,最低温度,白天,黑夜) values (%s,%s,%s,%s,%s)"
    value=(date[i],high[i],low[i],light[i],night[i])

5. Ejecutar instrucción SQL

cursor.execute(sql,value)
database.commit()  # 提交数据库

6. Cierre el objeto del cursor para cerrar la base de datos.

cursor.close()
database.close()

Efecto de prueba

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Se ha almacenado en la base de datos
, el efecto se muestra en la línea de comando.

mysql> select * from weather;
+------------+-----------+-----------+------------+------------+
| 日期       | 最高温度  | 最低温度  | 白天       | 黑夜       |
+------------+-----------+-----------+------------+------------+
| 15日星期四 | 高温 21| 低温 16| 阵雨东北风 | 中雨东北风 |
| 16日星期五 | 高温 18| 低温 14| 中雨东北风 | 阴东北风   |
| 17日星期六 | 高温 21| 低温 16| 阴北风     | 多云北风   |
| 18日星期天 | 高温 20| 低温 15| 阵雨东北风 | 阵雨东北风 |
| 19日星期一 | 高温 18| 低温 14| 阴东北风   | 多云东北风 |
+------------+-----------+-----------+------------+------------+
5 rows in set (0.00 sec)

Código completo

import requests
from bs4 import BeautifulSoup
import pymysql
print('请输入城市名称:')
cityname=input()
url='http://wthrcdn.etouch.cn/WeatherApi?city={}'.format(cityname)

response=requests.get(url)
content=response.text
soup=BeautifulSoup(content,'lxml')
#日期
date=[]
target=soup.find_all('date')
for each in target:
    date.append(each.text)
#最高温度
high=[]
target=soup.find_all('high')
for each in target:
    high.append(each.text)
#最低温度
low=[]
target=soup.find_all('low')
for each in target:
    low.append(each.text)
#light
light=[]
target=soup.find_all('day')
for each in target:
    light.append(each.text)

#night
night=[]
target=soup.find_all('night')
for each in target:
    night.append(each.text)

length=len(date)
# 连接database
database = pymysql.connect(
    host="主机名",#localhost
    port="端口",#默认应该是3306,注意这里不加引号
    user ="用户名",#mysql的用户名
    password ="密码",#设置的密码
    database ='数据库名',#使用的数据库名
    charset ='utf8')#指定为utf-8编码格式
cursor = database.cursor()  # 执行完毕返回的结果集默认以元组显示
for i in range(length):
    # 定义要执行的SQL语句
    sql = "INSERT INTO weather(日期,最高温度,最低温度,白天,黑夜) values (%s,%s,%s,%s,%s)"
    value=(date[i],high[i],low[i],light[i],night[i])
    cursor.execute(sql,value)
    database.commit()  # 提交数据库
cursor.close()
database.close()

Interludio, guía para evitar pisar boxes

Al principio, los datos se escriben en la base de datos y la visualización en chino es normal en la herramienta de visualización. Pero la pantalla china en la línea de comandos está distorsionada, así.

mysql> select * from weather;
+----------------+--------------+--------------+-----------------+-----------------+
| 鏃ユ湡         | 鏈€楂樻俯搴?| 鏈€浣庢俯搴?| 鐧藉ぉ          | 榛戝          |
+----------------+--------------+--------------+-----------------+-----------------+
| 15鏃ユ槦鏈熷洓     | 楂樻俯 21鈩?    | 浣庢俯 16鈩?    | 闃甸洦涓滃寳椋?     | 涓洦涓滃寳椋?     |
| 16鏃ユ槦鏈熶簲     | 楂樻俯 18鈩?    | 浣庢俯 14鈩?    | 涓洦涓滃寳椋?     | 闃翠笢鍖楅        |
| 17鏃ユ槦鏈熷叚     | 楂樻俯 21鈩?    | 浣庢俯 16鈩?    | 闃村寳椋?         | 澶氫簯鍖楅        |
| 18鏃ユ槦鏈熷ぉ     | 楂樻俯 20鈩?    | 浣庢俯 15鈩?    | 闃甸洦涓滃寳椋?     | 闃甸洦涓滃寳椋?     |
| 19鏃ユ槦鏈熶竴     | 楂樻俯 18鈩?    | 浣庢俯 14鈩?    | 闃翠笢鍖楅        | 澶氫簯涓滃寳椋?     |
+----------------+--------------+--------------+-----------------+-----------------+
5 rows in set (0.00 sec)

Revisé mucha información y leí muchos blogs. Todos decían: La entrada de la línea de comandos se show variables like 'char%';modificó a la codificación utf-8.
Está bien, hazlo.

mysql> show variables like 'char%';
+--------------------------+-----------------------------------+
| Variable_name            | Value                             |
+--------------------------+-----------------------------------+
| character_set_client     | utf8                              |
| character_set_connection | utf8                              |
| character_set_database   | utf8                              |
| character_set_filesystem | binary                            |
| character_set_results    | utf8                              |
| character_set_server     | utf8                              |
| character_set_system     | utf8                              |
| character_sets_dir       | E:\software\mysql\share\charsets\ |
+--------------------------+-----------------------------------+
8 rows in set (0.00 sec)

Modificado, de nuevo

Inserte la descripción de la imagen aquí
Este método no es factible.
Si encuentra esto, hágalo.
1. Encuentre su propia ubicación de instalación de mysql, busque el archivo my.ini, edite y
Inserte la descripción de la imagen aquí
modifique el código gbk aquí, y no olvide guardarlo más tarde.
Inserte la descripción de la imagen aquí
2. Entrada de línea de comando: net stop mysql
aquí el servicio mysql está cerrado
net start mysql
open mysql

C:\Users\acer>net stop mysql
MySQL 服务正在停止..
MySQL 服务已成功停止。


C:\Users\acer>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

3. Ejecute mysql desde la línea de comandos.

mysql> select * from weather;
+------------+-----------+-----------+------------+------------+
| 日期       | 最高温度  | 最低温度  | 白天       | 黑夜       |
+------------+-----------+-----------+------------+------------+
| 15日星期四 | 高温 21| 低温 16| 阵雨东北风 | 中雨东北风 |
| 16日星期五 | 高温 18| 低温 14| 中雨东北风 | 阴东北风   |
| 17日星期六 | 高温 21| 低温 16| 阴北风     | 多云北风   |
| 18日星期天 | 高温 20| 低温 15| 阵雨东北风 | 阵雨东北风 |
| 19日星期一 | 高温 18| 低温 14| 阴东北风   | 多云东北风 |
+------------+-----------+-----------+------------+------------+
5 rows in set (0.00 sec)

Bien, el problema se ha resuelto con éxito.

Supongo que te gusta

Origin blog.csdn.net/qq_44862120/article/details/109091224
Recomendado
Clasificación