爬取数据并写入MySQL数据库
生活随笔
收集整理的這篇文章主要介紹了
爬取数据并写入MySQL数据库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.爬取思路總結概述:
????????a.請求網頁,獲取json數據:request函數
????????b.使正則re 模塊,提取出 { {……} }信息所在部分的字典 :re.search()
????????c.為了防止連續請求中出現,IP被封的風險,將數據保存到文件中,實現數據永久化存儲
????????d.讀取文件中的數據,數據篩選,提取有用信息 :可使用jsonpath庫快速定位查找
????????e.寫入CSV文件,寫入數據庫MySQL:寫入數據庫時,可能會有異常而終止,加入try……
2.數據提取、存儲源碼如下:
from urllib import request import re,json,csv from jsonpath import jsonpathurl='https://voice.baidu.com/act/newpneumonia/newpneumonia' dates=request.urlopen(url) res=dates.read().decode() date=re.search(r'id="captain-config">(.*?)</script>',res).group().replace('id="captain-config">','').replace('</script>','') # 將網頁抓取到json信息保存到文件 with open('shuju.json','w',encoding='utf-8') as fp:fp.write(date) # 從文件中讀取信息 with open('shuju.json','r',encoding='utf-8') as fp1:# 讀取數據并反序列化D=json.loads(fp1.read())# 信息查找,可使用jsonpath快速定位查找信息列表 jsonpath(D,'$..caseList') list1 = [] for x in D['component'][0]['caseList']:for y in x['subList']:dict1 = {}dict1['省份']=x['area']dict1['城市']=y['city']dict1['累計確診']=y['confirmed']dict1['當前確診']=y['confirmedRelative']dict1['新增無癥狀感染者']=y['asymptomaticRelative']dict1['累計死亡']=y['died']list1.append(dict1)# # 寫入csv文件 with open('百度疫情.csv','w',encoding='utf-8') as fp2:header = ['省份', '城市', '累計確診', '當前確診', '新增無癥狀感染者', '累計死亡']writer = csv.DictWriter(fp2, header)for ss in list1:if ss!=[]:writer.writerow(ss)else:continue# 向數據庫的指定數據表插入數據,這里已經提前創建好數據庫 import pymysql try:db=pymysql.connect(host='localhost', # 數據庫服務器ip,Windows上的數據庫,使用回環ip或者localhostuser='root', # 用戶password='********', # 登錄密碼port=3306, # 端口號,默認3306db='baiduyiqing' # 數據庫名)print(db) # 獲取數據庫連接對象# 獲取一個游標對象with db.cursor() as cursor:sql='insert into yiqing(`省份`,`城市`,`累計確診`,`當前確診`,`新增無癥狀感染者`,`累計死亡`) values(%s,%s,%s,%s,%s,%s)'# 執行sql語句for s in list1:# 字段是一個元組affected_row=cursor.execute(sql,(s['省份'],s['城市'],s['累計確診'],s['當前確診'],s['新增無癥狀感染者'],s['累計死亡']))if affected_row==1:db.commit() except pymysql.MySQLError as e: # 如果錯誤 回滾 恢復到操作前的狀態db.rollback()print(e) finally:db.close()3.寫入CSV文件:
4.寫入MySQL數據庫:(數據很多并沒有完全展示)
?
總結
以上是生活随笔為你收集整理的爬取数据并写入MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【scipy】Python调用非线性最小
- 下一篇: 区块链技术应用落地解决方案 区块链溯源服