爬取天气信息,并将数据保存到数据库中。
软件:Pycharm
第三方库:requests,pymysql,BeautifulSoup
api接口:http://wthrcdn.etouch.cn/WeatherApi?city=城市名
访问天气api接口
这里查看苏州的天气信息
所以把api这样修改
http://wthrcdn.etouch.cn/WeatherApi?city=苏州
ok可以访问
这里的信息有很多,所以只爬取一部分作为测试就好。
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])
这里使用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
这里mysql服务已关闭
net start mysql
开启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,已经成功解决问题。