目的
気象情報をクロールし、データをデータベースに保存します。
プロジェクトの準備
ソフトウェア: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、問題は正常に解決されました。