使用python获取天气网页上的内容,并存入数据库
发布时间
阅读量:
阅读量
使用python获取天气网站中的内容,并存入数据库
例如:获取 http://api.help.bj.cn/api/?id=53 中的城市,lever,quality,pm2.5 中的内容**
网站是这样的:

网站源码:

python代码:
import requests,ast,hashlib,os,mysql.connector,re
from bs4 import BeautifulSoup
conn=mysql.connector.connect(user="root",password="自己的数据库密码",host="localhost") #连接到本地数据库
cursor=conn.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS pm25") #创建数据库pm25
conn=mysql.connector.connect(user="root",password="自己的数据库密码",host="localhost",database="pm25") #连接到数据库pm25
cursor=conn.cursor() #创建一个cursor对象,以便用它的方法运行sql代码
cursor.execute("CREATE TABLE IF NOT EXISTS table_pm25 (no smallint PRIMARY KEY NOT NULL ,sitename char(20) not null ,level varchar(10) ,quality char(4),pm25 double)") #执行sql代码,创建一个喊有no,sitename等字段的表
conn.commit() #刷新
url="http://api.help.bj.cn/api/?id=53" #确定要爬取数据的网站
htmltext=requests.get(url).text.encode("utf-8-sig") #获取源码,并制定编码格式
md5=hashlib.md5(htmltext).hexdigest() #获取判断该网站是否更新的md5编码
if not os.path.exists("pm25.txt"): #如果当前文件所在的目录不存在pm25.txt 文本文件,则创建一个(用来存储md5编码)
f=open("pm25.txt","w") #
f.write(md5) #在文本文件中写入md5
f.close() #
else:
with open("pm25.txt","r")as f: #如果存在pm25.txt文件,则读取其中的上次存入的md5码,并存入新的md5码
old_md5=f.read()
f=open("pm25.txt","w")
f.write(md5)
f.close()
if md5 != old_md5: #比较新旧md5码,如果不同,则表示网页已更新
print("old_md5={}".format(old_md5))
print("new_md5={}".format(md5))
print("数据已更新,正在获取.....")
cursor.execute("delete from table_pm25") #删除数据表中所有数据
conn.commit()
sp=BeautifulSoup(htmltext,"html.parser")
content=sp.text #获取所有HTML标签内的内容(不包括标签)
content=re.findall(r"aqidata[^$]+字段说明",content) #用排除法[^$] 获取固定字符间的内容
strs=re.findall(r"{[^$]+}",str(content)) #因为该源码内容较复杂,所以要用正则表达式多进行几次内容的筛选
strs=re.findall(r"{[^'^{^}^]+}",str(strs)) #最后得到的内容恰好是符合python的字典类型的数据
n=1 #作为对每行数据的编号
for str in strs: #获取每一行的数据,
jor=ast.literal_eval(str) #转变为自典型
print("城市:{} lever:{} quality:{} pm2.5:{}" .format(jor["city"],jor["level"],jor["quality"],jor["pm2_5"])) #输出,并将其插入到表中
sql="insert into table_pm25 values(%d,'%s','%s','%s',%f)"
cursor.execute(sql %(n,jor["city"],jor["level"],jor["quality"],jor["pm2_5"]))
n+=1
conn.commit()
else: #如果网页未更新,则取出之前存储的数据,并输出
print("数据未更新....")
cursor.execute("select * from table_pm25")
jor=cursor.fetchall()
for str in jor:
print("城市:{} lever:{} quality:{} pm2.5:{}" .format(str[1],str[2],str[3],str[4]))
cursor.close()
conn.close()
最后的输出结果:

插入在数据库中的内容:

为了做这个任务,还特意去学了学数据库,一步一个坑。万事开头难,刚开始啥都不懂,光是连接数据库就耗了半天,后来慢慢找教程,思路渐渐就开始清晰了。个人感觉搞清楚连接数据库和sql语句的基本用法后,实验就完成了一半了,剩下就是爬取网站啊,获取指定的字符这些。因为不同的网页架构不一样,有些网页的代码简洁漂亮,爬起来那叫个欢畅,有些网页的就…比如这次这个算是比较乱的,所以想要排除掉其他的多余字符 ,获取自己想要的那部分还是花了我很大一部分时间。
全部评论 (0)
还没有任何评论哟~
