房地産的發展要看經濟水準,居民的消費水準是衡量一個城市經濟水準的重要名額,部門接了一個廊坊市的市場調研項目,于是想到大衆點評看看各種排行榜,
一是看看有啥好吃好玩的,二是從另一個角度去了解當地的市場 / 消費水準。
一、需求分析
查到廊坊市大衆點評各個排行榜中的商家資訊,通過店鋪人均消費判斷當地的消費水準。
二、代碼邏輯
先擷取各個排行榜的連結
各個排行榜的href的位置在 id = "rankNavContainer" 的div中。可考慮用BeatifulSoup解析網頁,find(id = "rankNavContainer")
分别擷取排行榜資料
頁面采用XHR加載,可以直接看到排行榜商家資訊清單,由此可以考慮用JSON子產品解析頁面資料
再來看頁面的Headers,Request URL 和第一步擷取的連結有所不同,不能直接使用。rankId相同,可使用replace()函數進行替換
href="/shoplist/shopRank/pcChannelRankingV2?rankId=7acb1683f1cc89810888f620c792da28" target="_blank" rel="external nofollow"
#find擷取的href
http://www.dianping.com/mylist/ajax/shoprank?rankId=7acb1683f1cc89810888f620c792da28
#Request URL
附上最終代碼
import requests,bs4,time,json
w = open('H:/dianpin.csv','w',encoding='utf-8')
url_1 = 'http://www.dianping.com/shoplist/shopRank/pcChannelRankingV2?rankId=7acb1683f1cc89810888f620c792da28'
headers = {'Cookie': 'td_cookie=2464111219; _lxsdk_cuid=1690e07db3dc8-00119572b83533-57b1a3f-1fa400-1690e07db3ec8; _lxsdk=1690e07db3dc8-00119572b83533-57b1a3f-1fa400-1690e07db3ec8; _hc.v=93b7e7fa-41e7-eaf4-350f-db49d1812089.1550718590; cy=33; cye=langfang; _lxsdk_s=1690e07db3e-487-31e-98f%7C%7C324'
,'Host': 'www.dianping.com'
,'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36'
,'X-Requested-With': 'XMLHttpRequest'
}
#直接從排行榜單中擷取各個榜單連結
html_1 = requests.get(url_1,headers = headers).text
bs_data_1 = bs4.BeautifulSoup(html_1,'html.parser')
url_2_data = bs_data_1.find(id="rankNavContainer").find_all('a')
for url_2_t in url_2_data[1:]:
url_2 = "http://www.dianping.com{}".format(url_2_t['href'].replace('/shoplist/shopRank/pcChannelRankingV2?','/mylist/ajax/shoprank?'))
print(url_2_t.text)
#print(url_2)
html_2 = requests.get(url_2,headers = headers).content
#print(html_2)
js_data = json.loads(html_2)['shopBeans']
try:
num = 0
for data in js_data:
num += 1
name = data['shopName']
CategoryName = data['mainCategoryName']
mainRegionName = data['mainRegionName']
avgPrice = data['avgPrice']
w.write("{} ,{} ,{} ,{} ,{} ,{}\n".format(num,name,url_2_t.text,CategoryName,mainRegionName,avgPrice))
w.flush()
except TypeError:
pass
傳回資料
通過自定義切片器可以看到各個商圈的消費情況,具體分析略~~~。