前言

開發環境
- python 3.8: 解釋器
- pycharm: 代碼編輯器
- requests 發送請求
- pyecharts 繪制圖表
- pandas 讀取資料
爬蟲案例思路流程:
一. 資料來源分析:
- 確定需求, 采集那個網站上面什么資料
- 抓包分析, 通過開發者工具進行抓包分析
<瀏覽器自帶工具>開發者工具
F12 重繪網頁 清空資料, 點擊選擇
找相關資料包 --> 請求url 請求方式 得到資料是什么樣
- 抓包分析, 通過開發者工具進行抓包分析
二. 代碼實作步驟程序:
- 發送請求, 對于剛剛分析得到url地址發送請求
- 獲取資料, 獲取服務器回傳回應資料 --> 開發者工具 response
- 決議資料, 提取我們想要資料內容
- 保存資料
對于本篇文章有疑問的同學可以加【資料白嫖、解答交流群:753182387】
獲取疫情資料代碼
匯入所需模塊
import requests # 第三方 安裝
import csv
獲取資料
url = 'https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoCountryConfirmAdd,WomWorld,WomAboard'
response = requests.post(url)
json_data = https://www.cnblogs.com/qshhl/p/response.json()
決議資料
WomAboard = json_data['data']['WomAboard']
for wom in WomAboard:
name = wom['name'] # 國家名稱
confirm = wom['confirm'] # 確診人數
confirmAdd = wom['confirmAdd'] # 新增人數
dead = wom['dead'] # 死亡人數
heal = wom['heal'] # 治愈人數
nowConfirm = wom['nowConfirm'] # 現有確診
print(name, confirm, confirmAdd, dead, heal, nowConfirm)
保存資料
f = open('疫情資料1.csv', mode='a', encoding='utf-8', newline='')
# 初始化 使用 csv去寫入資料
csv_writer = csv.writer(f)
# 寫入表頭
csv_writer.writerow(['name', 'confirm', 'confirmAdd', 'dead', 'heal', 'nowConfirm'])


因為國內和國外的資料是分開的,所以還要獲取國內的資料
import requests
import csv
f = open('疫情資料.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.writer(f)
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=localCityNCOVDataList,diseaseh5Shelf'
json_data = https://www.cnblogs.com/qshhl/p/requests.post(url).json()
chinaTotal = json_data['data']['diseaseh5Shelf']['chinaTotal']
confirm = chinaTotal['confirm']
confirmAdd = chinaTotal['confirmAdd']
dead = chinaTotal['dead']
heal = chinaTotal['heal']
nowConfirm = chinaTotal['nowConfirm']
name = "國內"
print(name, confirm, confirmAdd, dead, heal, nowConfirm)
csv_writer.writerow([name, confirm, confirmAdd, dead, heal, nowConfirm])
可視化疫情資料
匯入模塊
import pandas as pd # 做表格操作的模塊
from pyecharts.charts import Map # 繪圖的模塊
from pyecharts import options as opts
讀取資料
name_map = {
'Singapore Rep.': '新加坡',
'Dominican Rep.': '多米尼加',
'Palestine': '巴勒斯坦',
'Bahamas': '巴哈馬',
'Timor-Leste': '東帝汶',
'Afghanistan': '阿富汗',
'Guinea-Bissau': '幾內亞比紹',
"C?te d'Ivoire": '科特迪瓦',
'Siachen Glacier': '錫亞琴冰川',
"Br. Indian Ocean Ter.": '英屬印度洋領土',
'Angola': '安哥拉',
'Albania': '阿爾巴尼亞',
'United Arab Emirates': '阿聯酋',
'Argentina': '阿根廷',
'Armenia': '亞美尼亞',
'French Southern and Antarctic Lands': '法屬南半球和南極領地',
'Australia': '澳大利亞',
'Austria': '奧地利',
'Azerbaijan': '阿塞拜疆',
'Burundi': '布隆迪',
'Belgium': '比利時',
'Benin': '貝寧',
'Burkina Faso': '布基納法索',
'Bangladesh': '孟加拉國',
'Bulgaria': '保加利亞',
'The Bahamas': '巴哈馬',
'Bosnia and Herz.': '波斯尼亞和黑塞哥維那',
'Belarus': '白俄羅斯',
'Belize': '伯利茲',
'Bermuda': '百慕大',
'Bolivia': '玻利維亞',
'Brazil': '巴西',
'Brunei': '文萊',
'Bhutan': '不丹',
'Botswana': '博茨瓦納',
'Central African Rep.': '中非共和國',
'Canada': '加拿大',
'Switzerland': '瑞士',
'Chile': '智利',
'China': '中國',
'Ivory Coast': '象牙海岸',
'Cameroon': '喀麥隆',
'Dem. Rep. Congo': '剛果(金)',
'Congo': '剛果(布)',
'Colombia': '哥倫比亞',
'Costa Rica': '哥斯達黎加',
'Cuba': '古巴',
'N. Cyprus': '北塞浦路斯',
'Cyprus': '塞浦路斯',
'Czech Rep.': '捷克',
'Germany': '德國',
'Djibouti': '吉布提',
'Denmark': '丹麥',
'Algeria': '阿爾及利亞',
'Ecuador': '厄瓜多爾',
'Egypt': '埃及',
'Eritrea': '厄立特里亞',
'Spain': '西班牙',
'Estonia': '愛沙尼亞',
'Ethiopia': '埃塞俄比亞',
'Finland': '芬蘭',
'Fiji': '斐',
'Falkland Islands': '福克蘭群島',
'France': '法國',
'Gabon': '加蓬',
'United Kingdom': '英國',
'Georgia': '格魯吉亞',
'Ghana': '加納',
'Guinea': '幾內亞',
'Gambia': '岡比亞',
'Guinea Bissau': '幾內亞比紹',
'Eq. Guinea': '赤道幾內亞',
'Greece': '希臘',
'Greenland': '格陵蘭',
'Guatemala': '危地馬拉',
'French Guiana': '法屬圭亞那',
'Guyana': '圭亞那',
'Honduras': '洪都拉斯',
'Croatia': '克羅地亞',
'Haiti': '海地',
'Hungary': '匈牙利',
'Indonesia': '印度尼西亞',
'India': '印度',
'Ireland': '愛爾蘭',
'Iran': '伊朗',
'Iraq': '伊拉克',
'Iceland': '冰島',
'Israel': '以色列',
'Italy': '意大利',
'Jamaica': '牙買加',
'Jordan': '約旦',
'Japan': '日本',
'Kazakhstan': '哈薩克斯坦',
'Kenya': '肯尼亞',
'Kyrgyzstan': '吉爾吉斯斯坦',
'Cambodia': '柬埔寨',
'Korea': '韓國',
'Kosovo': '科索沃',
'Kuwait': '科威特',
'Lao PDR': '老撾',
'Lebanon': '黎巴嫩',
'Liberia': '利比里亞',
'Libya': '利比亞',
'Sri Lanka': '斯里蘭卡',
'Lesotho': '萊索托',
'Lithuania': '立陶宛',
'Luxembourg': '盧森堡',
'Latvia': '拉脫維亞',
'Morocco': '摩洛哥',
'Moldova': '摩爾多瓦',
'Madagascar': '馬達加斯加',
'Mexico': '墨西哥',
'Macedonia': '馬其頓',
'Mali': '馬里',
'Myanmar': '緬甸',
'Montenegro': '黑山',
'Mongolia': '蒙古',
'Mozambique': '莫桑比克',
'Mauritania': '毛里塔尼亞',
'Malawi': '馬拉維',
'Malaysia': '馬來西亞',
'Namibia': '納米比亞',
'New Caledonia': '新喀里多尼亞',
'Niger': '尼日爾',
'Nigeria': '尼日利亞',
'Nicaragua': '尼加拉瓜',
'Netherlands': '荷蘭',
'Norway': '挪威',
'Nepal': '尼泊爾',
'New Zealand': '新西蘭',
'Oman': '阿曼',
'Pakistan': '巴基斯坦',
'Panama': '巴拿馬',
'Peru': '秘魯',
'Philippines': '菲律賓',
'Papua New Guinea': '巴布亞新幾內亞',
'Poland': '波蘭',
'Puerto Rico': '波多黎各',
'Dem. Rep. Korea': '朝鮮',
'Portugal': '葡萄牙',
'Paraguay': '巴拉圭',
'Qatar': '卡塔爾',
'Romania': '羅馬尼亞',
'Russia': '俄羅斯',
'Rwanda': '盧旺達',
'W. Sahara': '西撒哈拉',
'Saudi Arabia': '沙特阿拉伯',
'Sudan': '蘇丹',
'S. Sudan': '南蘇丹',
'Senegal': '塞內加爾',
'Solomon Is.': '所羅門群島',
'Sierra Leone': '塞拉利昂',
'El Salvador': '薩爾瓦多',
'Somaliland': '索馬里蘭',
'Somalia': '索馬里',
'Serbia': '塞爾維亞',
'Suriname': '蘇里南',
'Slovakia': '斯洛伐克',
'Slovenia': '斯洛文尼亞',
'Sweden': '瑞典',
'Swaziland': '斯威士蘭',
'Syria': '敘利亞',
'Chad': '乍得',
'Togo': '多哥',
'Thailand': '泰國',
'Tajikistan': '塔吉克斯坦',
'Turkmenistan': '土庫曼斯坦',
'East Timor': '東帝汶',
'Trinidad and Tobago': '特里尼達和多巴哥',
'Tunisia': '突尼斯',
'Turkey': '土耳其',
'Tanzania': '坦桑尼亞',
'Uganda': '烏干達',
'Ukraine': '烏克蘭',
'Uruguay': '烏拉圭',
'United States': '美國',
'Uzbekistan': '烏茲別克斯坦',
'Venezuela': '委內瑞拉',
'Vietnam': '越南',
'Vanuatu': '瓦努阿圖',
'West Bank': '西岸',
'Yemen': '也門',
'South Africa': '南非',
'Zambia': '贊比亞',
'Zimbabwe': '津巴布韋',
'Comoros': '科摩羅'
}
df = pd.read_csv('疫情資料.csv')
name_list = df['name'].values.tolist()
confirm_list = df['confirm'].values.tolist()
nowConfirm_list = df['nowConfirm'].values.tolist()
# pyechars 添加地理位置資訊 只能用英文
全球資料可視化
world_map = (
Map()
.add('累計確診', [list(i) for i in zip(name_list, confirm_list)], 'world', is_map_symbol_show=False, name_map=name_map)
.add('現有確診', [list(i) for i in zip(name_list, nowConfirm_list)], 'world', is_map_symbol_show=False, name_map=name_map)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=1000000, is_piecewise=True, pieces=pieces)
)
)
world_map.render('1.html')


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509415.html
標籤:Python
上一篇:【k哥爬蟲普法】爬蟲第一案,侵犯個人隱私,“入侵”短視頻服務器!
下一篇:請求庫之requests庫
