日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬取百度迁徙_Python爬虫抓取百度慧眼迁徙大数据(一)

發布時間:2023/12/10 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取百度迁徙_Python爬虫抓取百度慧眼迁徙大数据(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

百度慧眼遷徙3.0上線,在選擇某一城市的“遷出目的地”或“遷入來源地”后,即可查看該城市遷出、遷入人口的遷徙來源與遷徙時間趨勢。對城市大數據研究有所幫助。本文采取Python爬蟲抓取百度慧眼數據。

image

準備工作

工具:Chrome

2.查找數據源。

使用開發者工具(F12),打開Network,搜索關鍵字json。

image

右側preview預覽,打開data內的list,即可看到json格式的數據。

image

3.數據解析

查找json信息后,發現cityrank.jsonp、provincerank.jsonp和historycurve.jsonp都是可以利用的數據。cityrank是精確到市級的數據來源,provincerank是精確到省級的數據來源,historcurve是表示該地歷史數據。本文對cityrank.jsonp、provincerank.jsonp進行了爬取。

4.Url解析

右鍵,open in tab查看地址欄地址。 example:http://huiyan.baidu.com/migration/cityrank.jsonp?dt=province&id=330000&type=move_in&callback=jsonp_1581412681419_9173670

這里可以看到參數有dt,id,type,callback等。經過測試,dt為選取的地點的行政級別。id為選取的地點的行政編碼,是百度內部自己的編碼。type有move_in和move_out兩種參數,對應遷入和遷出。callback對應的是時間戳,時間精度非常大,后文默認分鐘級別。

5.百度城市編碼

在上一步內,最難填寫的是城市代碼,一開始猜測與郵政編碼有關,后對其進行驗證,發現并不完全相同。在瀏覽了百度地圖開放平臺之后,查找到了這么一份行政區劃鄉鎮清單201910.xlsx,與省份、城市id完全吻合。并通過在線的excel轉json工具,轉換為json格式,保存為文件,方便讀取。

爬取工作

因為涉及了Excel格式的寫入,所以使用前pip install xlwr。

源代碼

import requests

import json

import time

import xlwt

def CityName2Code(dt,cityName):

"""城市名/省名轉換為編碼

Arguments:

dt {str} -- [description]

cityName {str} -- [description]

"""

cityCode=''

searchKey=''

codeKey=''

#城市編碼的相對路徑

cityCodePath ='migration/CityCode.json'

#打開文件,文件編碼格式為UTF-8

data = open((cityCodePath), encoding='utf-8')

result = json.load(data)

if dt=='province':

searchKey='省名稱'

codeKey='省代碼'

elif dt =='city':

searchKey='地級市名稱'

codeKey='地級市代碼'

for rowNum in range(len(result)):

if result[rowNum][searchKey]==cityName:

cityCode = result[rowNum][codeKey]

return cityCode

def UrlFormat(rankMethod,dt,name,migrationType,date):

"""字符串定義,默認時間為00:00:00,精確到分鐘級別

Arguments:

rankMethod {str} -- city||province 獲得數據的行政級別

dt {str} -- city||province 中心地行政級別

name {str} -- example:'溫州市||浙江省' 作為中心地的地名

migrationType {str} -- in||out

date {str} -- example:20200202

"""

list_date = list(date)

list_date.insert(4,'-')

list_date.insert(7,'-')

formatDate = ''.join(list_date)

formatDate= formatDate+" 00:00:00"

#轉換成時間數組

timeArray = time.strptime(formatDate, "%Y-%m-%d %H:%M:%S")

#轉換成時間戳

timeUnix = time.mktime(timeArray)

ID = CityName2Code(dt,name)

url='http://huiyan.baidu.com/migration/{0}rank.jsonp?dt={1}&id={2}&type=move_{3}&date={4}&callback' \

'=jsonp_{5}000_0000000'.format(rankMethod,dt,ID,migrationType,date,int(timeUnix))

return url

#返回數據處理

def JsonTextConvert(text):

"""Text2Json

Arguments:

text {str} -- webContent

Returns:

str -- jsonText

"""

text = text.encode('utf-8').decode('unicode_escape')

head, sep, tail = text.partition('(')

tail=tail.replace(")","")

return tail

def GetData(rankMethod,dt,name,migrationType,date,isExcel):

"""

Arguments:

rankMethod {str} -- city||province 獲得數據的行政級別

dt {str} -- city||province 中心地行政級別

name {str} -- example:'溫州市||浙江省' 作為中心地的地名

migrationType {str} -- in||out

date {str} -- example:20200202

isExcel {bool} -- true轉出為excel格式

"""

r = requests.get(url=UrlFormat(rankMethod,dt,name,migrationType,date))

text = r.text

rawData=json.loads(JsonTextConvert(text))

data= rawData['data']

list = data['list']

nameKey = ''

if rankMethod=='province':

nameKey = 'province_name'

else:

nameKey = 'city_name'

if isExcel == True:

#輸出excel格式數據

workbook = xlwt.Workbook(encoding='utf-8') #創建workbook 對象

worksheet = workbook.add_sheet('sheet1',cell_overwrite_ok=True) #創建工作表sheet

table_head = [nameKey,'value']#表頭

index = 1

for i in range(len(table_head)):

worksheet.write(0,i,table_head[i])

for l in list:

worksheet.write(index,0,l[nameKey])

worksheet.write(index,1,l['value'])

index=index+1

filename = name+date+'.xls'

workbook.save('migration/'+filename) #保存表

else:

#打印數據

for l in list:

print(l[nameKey],':',l['value'])

def main():

#第一個參數填‘city‘或’province’,為獲取數據的行政級別,分別為市級或省級

#第二個參數填‘city‘或’province’,為中心地的行政級別

#第三個參數填‘中心地名’,例如‘浙江省’或‘杭州市’

#第四個參數填時間,例如‘20200210’,默認每天的零點

#第四個參數填True或False,True則輸出Excel(文件路徑注意),否則打印出來

GetData('city','province','浙江省','in','20200210',True)

if __name__ == '__main__':

main()

總結

以上是生活随笔為你收集整理的python爬取百度迁徙_Python爬虫抓取百度慧眼迁徙大数据(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。