寫在前面
為了使用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的縮進規范確實難頂啊