爬虫類プロジェクト戦闘15:クロール気象情報

目的

気象情報をクロールし、データをデータベースに保存します。

プロジェクトの準備

ソフトウェア:Pycharm
サードパーティライブラリ:requests、pymysql、BeautifulSoup
APIインターフェース:http://wthrcdn.etouch.cn/WeatherApi?city = city name

プロジェクト分析


蘇州の天気情報を表示するには、こちらの天気APIインターフェースにアクセスしてください。
このように、APIを変更してください。

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

ここに画像の説明を挿入
わかりましたアクセスできます
ここにはたくさんの情報があるので、テストとしてその一部だけをクロールします。

コード

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)

印刷する

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

ここに画像の説明を挿入
OK、クロールが完了しました

データベースに接続します

ここでは、MySQLを使用して
最初にデータベースを
ここに画像の説明を挿入
作成し、テーブルを作成します
ここに画像の説明を挿入
1.モジュールをインポートします
导入第三方库:import pymysql

2.データベースに接続します

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

3.カーソルオブジェクトを作成します

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

4.実行するSQLステートメントを定義します

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

5.SQLステートメントを実行します

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

6.カーソルオブジェクトを閉じてデータベースを閉じます

cursor.close()
database.close()

テスト効果

ここに画像の説明を挿入
ここに画像の説明を挿入
データベース
保存されている場合、効果はコマンドラインに表示されます

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)

完全なコード

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()

間奏、ピットを踏まないようにガイド

最初に、データはデータベースに書き込まれ、視覚化ツールでは中国語の表示が正常です。しかし、コマンドラインの中国語の表示は、このようにすべて文字化けしています。

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)

私はたくさんの情報をチェックし、たくさんのブログを読みました。彼らは皆、次のように言っています。コマンドライン入力がshow variables like 'char%';utf-8エンコーディングに変更されまし
た。

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)

変更、再び

ここに画像の説明を挿入
この方法は実行可能ではありません。
これに遭遇した場合は、そうしてください。
1.独自のmysqlインストール場所を見つけ、my.iniファイルを見つけ、
ここに画像の説明を挿入
ここでgbkコードを編集および変更し、後で保存することを忘れないでください。
ここに画像の説明を挿入
2.コマンドライン入力:net stop mysql
heremysqlサービスが閉じていますnetstart
mysql
open mysql

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


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

3.コマンドラインからmysqlを実行します

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)

OK、問題は正常に解決されました。

おすすめ

転載: blog.csdn.net/qq_44862120/article/details/109091224