使用Python進行疫情數據爬取


寫在前面

為了使用python學習爬取疫情數據,提前學習了python中的語法和各種存儲結構(dirt),若沒有這些基礎很難看懂python代碼,更別提寫了

題目

題目和上一篇博客一樣,爬取疫情數據,這次我們爬取騰訊的數據,使用python來進行爬取。

思路分析

  • 1.分析網頁的網絡數據,取得請求頭,並用python的requests包進行解析和讀取。
  • 2.分析解析出的包,進行提取和操作
  • 3.將數據提出並存到數據庫
  • 涉及知識點:python對mysql的操作,python的爬取

效果截圖

代碼展示

import pymysql
import requests
import json
# 放入要爬的url
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
# 設置header做一個防爬機制
header = {"user-agent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Mobile Safari/537.36"}
# 獲取response的json
response = requests.get(url, headers=header)
# 取得數據詞典
data = json.loads(response.content.decode())
data_str = data['data']
data_json = json.loads(data_str)
# 取出各個省和市的dict
areaTree = data_json['areaTree'][0]['children']
# 連接數據庫
db = pymysql.connect(host = 'localhost', port=3306, user='root', password='abc456', db='yiqing', charset='utf8')
#使用cursor方法生成一個游標
cursor = db.cursor()
# 更新時間
lastUpdateTime = data_json['lastUpdateTime']
for province_list in areaTree:
    province_name = province_list['name']
    confirm_total = province_list['total']['confirm']
    suspect_total = province_list['total']['suspect']
    dead_total = province_list['total']['dead']
    heal_total = province_list['total']['heal']
    for itemChild in province_list['children']:
        city_name = itemChild['name']
        confirm = itemChild['total']['confirm']
        suspect = itemChild['total']['suspect']
        dead = itemChild['total']['dead']
        heal = itemChild['total']['heal']
        # 插入數據

        sql = "insert into pythontest2_copy1(id, province_name, city_name, confirm, suspect, dead, heal,lastUpdateTime) values ({},'{}','{}','{}','{}','{}','{}','{}')".format(0, province_name, city_name, confirm, suspect, dead, heal,lastUpdateTime)
        cursor.execute(sql)
    sql_total = "insert into pythontest2_copy1(id, province_name, city_name, confirm, suspect, dead, heal,lastUpdateTime) values ({},'{}',{},'{}','{}','{}','{}','{}')".format(
        0, province_name, 0, confirm_total, suspect_total, dead_total, heal_total, lastUpdateTime)
    cursor.execute(sql_total)
    db.commit()

實際完成時間表

預估時間:兩個小時

日期 開始時間 結束時間 中斷時間 凈時間 活動 備注
3.11 16:00 16:50 20 30 編碼前准備
3.11 21:00 21:30 30 編寫代碼
3.11 21:30 21:45 15 測試
3.11 21:45 21:50 5 整理

缺陷記錄表

日期 編號 類型 引入階段 排除階段 修復時間 修復缺陷 描述
3.11 1 1 編碼 編碼 1min 規范縮進 縮進不夠規范,出現錯誤
3.11 2 2 編碼 測試 2min 修改sql語句位置 數據庫存儲的數據與預期的不一致
3.11 3 3 編碼 測試 1min 刪掉多余的"," sql語句書寫不規范,無法插入數據庫
3.11 4 4 編碼 測試 3min 將string再轉成python對象類型 沒有正確提取數據

總結

可以很明顯的看到用python編寫爬蟲的簡單和簡便,不得不感嘆各個語言的特性。這里的大部分時間都用在看別人的代碼上了,但最后收獲也很大。
Ps:python的縮進規范確實難頂啊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM