婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python爬蟲爬取全球疫情數據并存儲到mysql數據庫的步驟

Python爬蟲爬取全球疫情數據并存儲到mysql數據庫的步驟

熱門標簽:西藏智能外呼系統五星服務 千陽自動外呼系統 在哪里辦理400電話號碼 原裝電話機器人 工廠智能電話機器人 清遠360地圖標注方法 平頂山外呼系統免費 江蘇客服外呼系統廠家 400電話申請服務商選什么

思路:使用Python爬蟲對騰訊疫情網站世界疫情數據進行爬取,封裝成一個函數返回一個

     字典數據格式的對象,寫另一個方法調用該函數接收返回值,和數據庫取得連接后把

     數據存儲到mysql數據庫。

一、mysql數據庫建表

CREATE TABLE world(
 id INT(11) NOT NULL AUTO_INCREMENT,
 dt DATETIME NOT NULL COMMENT '日期',
 c_name VARCHAR(35) DEFAULT NULL COMMENT '國家',
 continent VARCHAR(35) DEFAULT NULL COMMENT '所屬大洲',
 nowConfirm INT(11) DEFAULT NULL COMMENT '累計確診',
 confirm INT(11) DEFAULT NULL COMMENT '當日現存確診',
 confirmAdd INT(11) DEFAULT NULL COMMENT '當日新增確診',
 suspect INT(11) DEFAULT NULL COMMENT '剩余疑似',
 heal INT(11) DEFAULT NULL COMMENT '累計治愈',
 dead INT(11) DEFAULT NULL COMMENT '累計死亡',
 confirmAddCut INT(11) DEFAULT NULL COMMENT 'confirmAddCut',
 confirmCompare INT(11) DEFAULT NULL COMMENT 'confirmCompare',
 nowConfirmCompare INT(11) DEFAULT NULL COMMENT 'nowConfirmCompare',
 healCompare INT(11) DEFAULT NULL COMMENT 'healCompare',
 deadCompare INT(11) DEFAULT NULL COMMENT 'deadCompare',
 PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

注意建立的表,數據的名字,數據的長度,數據的類型,主鍵的定義一定要小心仔細。

這里博主出現了幾個小錯誤:

①數據表的主鍵不可以設置為日期,因為在之后爬取數據之后可以看到,網站給的數據是同一天的,

因為主鍵不可以有重復,所以相同的日期是不可以作為主鍵定義的。

②設置int類型的id作為數據表的主鍵,那么存在一個問題,在往表里插入數據的時候,id位置的數據值需要考慮,

這個方法可以解決:可以在傳值的時候把id的值設定為 0,前提是id是自增的,

這樣數據庫是可以自己處理id的,依然是從0開始自增,這樣避免了不給id傳值導致Null的異常。

③博主使用的mysql可視化工具默認在一個頁面顯示30條記錄,在右上角可以改變顯示的記錄數,因為本次插入的

是185條數據,所以在插入完之后如果發現數據不對,可以看看可視化工具是不是有什么設置導致的。

二、下面直接上代碼(爬蟲方法)

"""
獲取全球疫情數據
"""
def get_world_data():
 url='https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist'
 headers={'user-agent': 'WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
 # 創建會話對象
 # session = requests.session()
 # 請求接口
 # result = session.get('https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist')
 # 打印結果
 # print(result.text)
 res = requests.get(url, headers=headers)
 # print(res.text)
 response_data_0 = json.loads(res.text.replace('jQuery34102848205531413024_1584924641755(', '')[:-1]) #轉化json對象
 # print(response_data_0.keys())
 # print(response_data_0)
 response_data_1=response_data_0['data']
 # print(response_data_1)
 # print(response_data_1[0].keys())
 # data = jsonpath.jsonpath(resJson_1, '$.data.*')
 # print(resJson_1.keys())
 # for d in data:
 # res = '日期:' + d['date'] + '--' + d['continent'] + '--' + d['name'] + '--' + '新增確診:' + str(
 # d['confirmAdd']) + '累計確診:' + str(d['confirm']) + '治愈:' + str(d['heal']) + '死亡:' + str(d['dead'])
 # file = r'C:/Users/Administrator/Desktop/world_data.txt'
 # with open(file, 'w+', encoding='utf-8') as f:
 # f.write(res + '\n') # 加\n換行顯示
 # f.close()
 world={}
 for i in response_data_1:
 temp=i['y']+'.'+i['date']
 tup = time.strptime(temp, '%Y.%m.%d')
 dt = time.strftime('%Y-%m-%d', tup) # 改變時間格式,插入數據庫 日期
 # print(ds)
 c_name=i['name'] #國家
 continent=i['continent'] #所屬大洲
 nowConfirm=i['nowConfirm'] #現有確診
 confirm=i['confirm'] #累計確診
 confirmAdd=i['confirmAdd'] #新增確診
 suspect=i['suspect'] #現有疑似
 heal=i['heal'] #累計治愈
 dead=i['dead'] #累計死亡
 confirmAddCut=i['confirmAddCut']
 confirmCompare=i['confirmCompare']
 nowConfirmCompare=i['nowConfirmCompare']
 healCompare=i['healCompare']
 deadCompare=i['deadCompare']
 world[c_name] = {'dt':dt ,
  'continent': continent,
  'nowConfirm': nowConfirm,
  'confirm': confirm,
  'confirmAdd': confirmAdd,
  'suspect': suspect,
  'heal': heal,
  'dead': dead,
  'confirmAddCut': confirmAddCut,
  'confirmCompare': confirmCompare,
  'nowConfirmCompare': nowConfirmCompare,
  'healCompare': healCompare,
  'deadCompare': deadCompare,
  }
 return world

三、插入數據庫

def insert_world():
 """
 更新 world 表
 :return:
 """
 cursor = None
 conn = None
 try:
 dic = get_world_data()
 print(dic)
 conn, cursor = get_conn()
 sql = "insert into world values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
 sql_query = 'select %s=(select dt from world order by id desc limit 1)' #對比當前最大時間戳
 cursor.execute(sql_query,dic['美國']['dt'])
 if not cursor.fetchone()[0]:
 print(f"{time.asctime()}開始插入世界數據")
 for k, v in dic.items(): # item 格式 {'2021-01-13': {'confirm': 41, 'suspect': 0, 'heal': 0, 'dead': 1}
 cursor.execute(sql, [0,v.get('dt'), k, v.get("continent"), v.get("nowConfirm"),
  v.get("confirm"), v.get("confirmAdd"),v.get("suspect"),v.get("heal"), v.get("dead")
  , v.get("confirmAddCut"), v.get("confirmCompare"), v.get("nowConfirmCompare"), v.get("healCompare"),
 v.get("deadCompare")])
 conn.commit() # 提交事務
 print(f"{time.asctime()}插入世界數據完畢")
 else:
 print(f"{time.asctime()}世界數據已是最新數據!")
 except:
 traceback.print_exc()
 finally:
 close_conn(conn, cursor)

總結一下在完成這兩個方法的過程中遇到的問題,首先是最基礎的問題,數據的類型和格式的轉換,這里主要是指json字符串和

Python里對應的數據對象(list和字典)。

(1)一般來講對我們而言,需要抓取的是某個網站或者某個應用的內容,提取有用的價值。內容一般分為三部分,

結構化的數據、半結構化的數據和非機構化數據。

1.結構化數據:
       可以用統一的結構加以表示的數據。可以使用關系型數據庫表示和存儲,表現為二維形式的數據,一般特點是:數據以行為單位,

  一行數據表示一個實體的信息,每一行的數據的屬性是相同的。
2.半結構化數據:
       結構化數據的一種形式,并不符合關系型數據庫或其他數據表的形式關聯起來的數據模型結構,但包含相關標記,

  用來分隔語義元素以及對記錄和字段進行分層。因此他也被成為自描述的結構。常見的半結構數據有:html,xml和json等、

  實際上是以樹或者圖的結構來存儲的。
       對于半結構化數據,節點中屬性的順序是不重要的,不同的半結構化數據的屬性的個數是不一樣的。這樣的數據格式,

  可以自由的表達很多有用的信息,

  包含自描述信息。所以半結構化數據的擴展性很好,特別適合于在互聯網中大規模傳播。
3.非結構化數據

  就是沒有固定的結構。各種文檔,圖片,視頻或者音頻都屬于非結構化數據。對于這類數據,我們一般直接整體進行存儲,而且一般存儲為二進制形式。

原文鏈接:www.jb51.net/article/208448.htm

json數據      

 json(JavaScript Object Notation,JS對象標記)是一種輕量級的數據交換格式。

基于ECMAScript(w3c制定的JS規范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。

簡潔和清晰的層次結構使得JSON成為理想的數據交換語言。

       特點:易于閱讀、易于機器生成、有效提升網絡速度。       

JSON語法規則:

在JS語言中,一切都是對象。因此,任何支持的類型都可以通過json來表示。

例如字符串、數字,對象,數組。
Js中對象和數組是比較特殊并且常用的兩種類型:
       1、對象表示為鍵值對{name:'zhangsan',age:'7'}
       2、數據有逗號分隔[1,2,3,4,5]
       3、花括號保存對象
       4、方括號保存數組。
js的對象就相當于python中的字典
js的數組就相當于Python中的列表
       因為json用來存儲js的對象或者數組,所以在Python中我們可以將json轉化為list或者dict。

解析json的包json:
       json.dumps(python的list或者dict)---->(返回值)---->json字符串。
       json.loads(json字符串)------>(返回值)----->python的list或者dict.

       json.dump(list/dict,fp)—>list,或者字典保存到json文件中。
       json.load(fp)—>list/dict:從json文件中讀出json數據。

       json鍵值對是用來保存js對象的一種方式,和js對象的寫法頁大同小異,比如:
  {“firstName”:“Json”,“Class”:“aid1111”}等價于下面這條js語句:{firstName:“Json”,Class:“aid1111”}。
       很多人搞不清楚json和js對象的關系,甚至誰是誰都不清楚。其實可以這么理解:

  【JSON是JS對象的字符串表達式,他使用文本形式表示一個JS對象的信息,本質是一個字符串?!?br />         如var obj = {a:“hello”,b:“World”}這是一個js對象。注意,鍵名也是可以用引號包裹的var json = ' {“a”:“hello”,“b”:“World”}'這是一個json字符串,本質上是一個字符串。
       JSON作為數據包格式傳輸的時候具有更高的效率,這是因為JSON不想xml那樣具有嚴格的閉合標簽,這就讓有效數據量與總數據包比大大提升,從而減少同等數據流量的情況下,網絡的傳輸的壓力大大減低。

之前寫過一篇關于爬取中國疫情數據的博客文章,那里爬取的每日疫情數據和全球爬取的疫情數據格式有一點點不同:

這是中國的疫情數據,注意箭頭指的地方,這里的data對應的key是字典

這是全球疫情,注意這里data對應的是list

數據的格式非常重要,因為在后續需要把網頁爬取的數據接受之后,還要把數據導入數據庫,所以中間數據的格式必須清楚,

比如list類型的可以通過下標去訪問,而字典只可以通過name來訪問,字典是不提供索引的,所以不可以通過下標訪問。還

有就是數據庫里的日期格式一定要注意轉換再插入。

四、總結一下爬取數據的步驟:

(1)首先需要導入需要的包:

import requests
import pymysql
import time
import json
import traceback

(2)通過request向被爬取網站的url發起一個請求(如果網站有反爬取手段,需要在請求里加上headers)
獲取headers:

到指定網站,瀏覽器按F12,之后在網絡那一個選項里可以看到。

 (3)獲取和解析數據

 url='https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist'
 headers={'user-agent': 'WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
 
 res = requests.get(url, headers=headers)
 # print(res.text)
 response_data_0 = json.loads(res.text.replace('jQuery34102848205531413024_1584924641755(', '')[:-1]) #轉化json對象

這里進行了第一步解析,通過json.loads( ) 方法把從網頁獲取的json字符串數據轉化成Python對應的list或者字典。

如果第一步解析之后data對應的value不是list,那么可以進行第二次解析,本次操作中,世界疫情數據的data對

應的數據是一個list,所以也就不需要進行第二次轉化,可以直接通過list的下標去訪問。

數據轉化是必要的,在網絡中json字符串傳遞小巧安全速度快,但是我們讀取數據,如果直接對字符串進行操作

會非常不方便,所以我們需要解析json字符串,也就是通過json.loads()方法把字符串轉化成Python對應的list或

者字典對象,這樣我們訪問操作這些數據會變得簡單。

以上就是Python爬蟲爬取全球疫情數據并存儲到mysql數據庫的步驟的詳細內容,更多關于python 爬取疫情數據存儲到mysql的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 教你如何使用Python快速爬取需要的數據
  • python爬取豆瓣電影TOP250數據
  • python爬取鏈家二手房的數據
  • Python手拉手教你爬取貝殼房源數據的實戰教程
  • Python數據分析之Python和Selenium爬取BOSS直聘崗位
  • python爬蟲之爬取谷歌趨勢數據
  • python selenium實現智聯招聘數據爬取
  • python爬蟲之教你如何爬取地理數據
  • Python爬取騰訊疫情實時數據并存儲到mysql數據庫的示例代碼
  • Python爬蟲之自動爬取某車之家各車銷售數據

標簽:隨州 白城 股票 西安 安慶 日照 天水 錦州

巨人網絡通訊聲明:本文標題《Python爬蟲爬取全球疫情數據并存儲到mysql數據庫的步驟》,本文關鍵詞  Python,爬蟲,爬取,全球,疫情,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python爬蟲爬取全球疫情數據并存儲到mysql數據庫的步驟》相關的同類信息!
  • 本頁收集關于Python爬蟲爬取全球疫情數據并存儲到mysql數據庫的步驟的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产二区国产一区在线观看| 日韩电影在线免费看| 国产精品女同互慰在线看| 欧美日韩国产免费| 一区二区三区欧美在线观看| 99国产欧美另类久久久精品| 国产精品第一页第二页第三页| 国产裸体歌舞团一区二区| 日韩精品一区二区三区视频播放 | 在线免费不卡视频| 国产精品私人影院| 99久久精品久久久久久清纯| 国产精品对白交换视频| 91蝌蚪国产九色| 亚洲1区2区3区视频| 日韩欧美专区在线| 777久久久精品| 国产麻豆视频一区| 国产精品成人免费在线| 欧美亚洲综合在线| 激情欧美一区二区| 亚洲精品五月天| 欧美一区二区三区四区视频 | 欧美日韩综合一区| 天堂影院一区二区| 久久久久成人黄色影片| 色播五月激情综合网| 91精品国产福利| 99久久99久久久精品齐齐| 午夜欧美大尺度福利影院在线看| 欧美成人欧美edvon| 99精品欧美一区二区三区综合在线| 夜色激情一区二区| 久久久精品tv| 欧美日韩精品一区二区三区蜜桃| 看国产成人h片视频| 亚洲码国产岛国毛片在线| 日韩欧美中文字幕精品| 成人app在线观看| 日韩精品福利网| 亚洲色图.com| 久久伊人中文字幕| 欧美午夜精品久久久久久孕妇| 国产乱子轮精品视频| 亚洲福利一二三区| 久久精品夜色噜噜亚洲a∨| 欧美撒尿777hd撒尿| 成人app网站| 国产一区二区三区观看| 五月婷婷久久综合| 亚洲成人手机在线| 亚洲精品久久久蜜桃| 国产喷白浆一区二区三区| 日韩欧美激情一区| 欧美日韩免费高清一区色橹橹 | 99久久精品国产导航| 美国十次综合导航| 三级精品在线观看| 一区二区三区高清| 亚洲桃色在线一区| 综合分类小说区另类春色亚洲小说欧美 | 日本欧洲一区二区| 亚洲高清不卡在线| 亚洲成在线观看| 午夜婷婷国产麻豆精品| 亚洲综合色丁香婷婷六月图片| 亚洲色图制服诱惑| 综合久久国产九一剧情麻豆| 中文一区在线播放| 国产精品三级av| 国产精品久久久久久久久晋中| 国产亚洲污的网站| 欧美国产一区二区| 国产精品无人区| 国产欧美日韩在线| 国产精品免费视频观看| 亚洲欧洲精品天堂一级| 亚洲欧洲一区二区三区| 亚洲欧洲制服丝袜| 亚洲一卡二卡三卡四卡无卡久久| 亚洲精品美国一| 亚洲国产乱码最新视频| 午夜一区二区三区视频| 日本网站在线观看一区二区三区 | 99久久精品国产观看| 色综合天天性综合| 欧美在线不卡一区| 欧美一级免费观看| 国产欧美一二三区| 亚洲女人小视频在线观看| 亚洲妇女屁股眼交7| 九九**精品视频免费播放| 国产.欧美.日韩| 欧美日韩一区二区三区视频| 91精品国产一区二区| 久久久久久97三级| 亚洲精品乱码久久久久久黑人| 日韩精彩视频在线观看| 国产一区二区成人久久免费影院| 99国产精品久| 日韩视频免费观看高清完整版在线观看 | 色婷婷av一区二区三区gif| 91精品国产综合久久蜜臀| 国产欧美视频一区二区| 亚洲国产中文字幕在线视频综合| 国内精品视频666| 91丨九色丨蝌蚪丨老版| 欧美变态tickle挠乳网站| 国产精品久久久久久妇女6080| 石原莉奈在线亚洲二区| 99精品桃花视频在线观看| 日韩三级免费观看| 亚洲日本va在线观看| 国内精品伊人久久久久影院对白| 在线免费观看成人短视频| 国产精品动漫网站| 国产精品888| 日韩精品一区二区三区三区免费| 国产精品久久久久久久久免费樱桃 | www.亚洲国产| 91精品欧美久久久久久动漫| 亚洲天堂免费看| 成人在线视频一区二区| 欧美xxxxx牲另类人与| 亚洲国产一区二区a毛片| 国产精品一区二区男女羞羞无遮挡 | 亚洲精品在线三区| 亚洲高清中文字幕| 91原创在线视频| 国产精品毛片久久久久久久| 韩国欧美国产1区| 欧美精品自拍偷拍| 亚洲乱码国产乱码精品精98午夜| 国产成人在线影院| 国产精品一色哟哟哟| 精品少妇一区二区三区在线播放 | 国产成人精品影视| 国产精一区二区三区| 日韩视频一区二区三区在线播放| 视频一区二区不卡| 欧美日韩亚洲另类| 亚洲一区二区视频在线| 欧美日韩一区不卡| 亚洲午夜精品在线| 欧美精品精品一区| 一区二区理论电影在线观看| 亚洲高清不卡在线观看| 欧美精品1区2区3区| 亚洲福利视频一区二区| 欧美日韩精品三区| 美美哒免费高清在线观看视频一区二区| 91 com成人网| 日韩电影免费一区| 精品视频资源站| 日本午夜精品视频在线观看| 日韩一级二级三级| 国产成人精品www牛牛影视| 国产精品久久影院| 色综合天天综合给合国产| 亚洲高清一区二区三区| 精品国产凹凸成av人导航| 国产东北露脸精品视频| 一区二区三区影院| 欧美一区在线视频| 亚洲国产中文字幕| 欧美大片免费久久精品三p| 国产精品自在在线| 亚洲激情成人在线| 666欧美在线视频| 成人av动漫网站| 亚洲一级片在线观看| 欧美va日韩va| 一本色道久久加勒比精品| 日本不卡一二三| 国产精品美女久久久久高潮| 欧美在线播放高清精品| 国产呦萝稀缺另类资源| 亚洲精品国久久99热| 精品精品国产高清a毛片牛牛| 国产69精品久久久久777| 亚洲va国产va欧美va观看| 国产亚洲成aⅴ人片在线观看| 91免费国产视频网站| 国产一区三区三区| 亚洲一级不卡视频| 日本一区二区高清| 在线播放91灌醉迷j高跟美女 | 国产精品99久久久久| 亚洲成人午夜影院| 91精品国产入口| 91国产免费看| 天堂影院一区二区| 亚洲人123区| 欧美久久一区二区| 国产福利视频一区二区三区| 五月激情综合网| 久久久精品综合| 91国模大尺度私拍在线视频| 精品国产凹凸成av人导航| 欧美日韩视频不卡|