天天看點

房地産市場研究遇到Python爬蟲一、需求分析

房地産的發展要看經濟水準,居民的消費水準是衡量一個城市經濟水準的重要名額,部門接了一個廊坊市的市場調研項目,于是想到大衆點評看看各種排行榜,

一是看看有啥好吃好玩的,二是從另一個角度去了解當地的市場 / 消費水準。

一、需求分析

查到廊坊市大衆點評各個排行榜中的商家資訊,通過店鋪人均消費判斷當地的消費水準。

房地産市場研究遇到Python爬蟲一、需求分析

二、代碼邏輯

先擷取各個排行榜的連結

各個排行榜的href的位置在 id = "rankNavContainer" 的div中。可考慮用BeatifulSoup解析網頁,find(id = "rankNavContainer")

房地産市場研究遇到Python爬蟲一、需求分析

分别擷取排行榜資料

頁面采用XHR加載,可以直接看到排行榜商家資訊清單,由此可以考慮用JSON子產品解析頁面資料

房地産市場研究遇到Python爬蟲一、需求分析

再來看頁面的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
           
房地産市場研究遇到Python爬蟲一、需求分析

附上最終代碼

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
           

傳回資料

通過自定義切片器可以看到各個商圈的消費情況,具體分析略~~~。

房地産市場研究遇到Python爬蟲一、需求分析