房地产的发展要看经济水平,居民的消费水平是衡量一个城市经济水平的重要指标,部门接了一个廊坊市的市场调研项目,于是想到大众点评看看各种排行榜,
一是看看有啥好吃好玩的,二是从另一个角度去理解当地的市场 / 消费水平。
一、需求分析
查到廊坊市大众点评各个排行榜中的商家信息,通过店铺人均消费判断当地的消费水平。
二、代码逻辑
先获取各个排行榜的链接
各个排行榜的href的位置在 id = "rankNavContainer" 的div中。可考虑用BeatifulSoup解析网页,find(id = "rankNavContainer")
分别获取排行榜数据
页面采用XHR加载,可以直接看到排行榜商家信息列表,由此可以考虑用JSON模块解析页面数据
再来看页面的Headers,Request URL 和第一步获取的链接有所不同,不能直接使用。rankId相同,可使用replace()函数进行替换
href="/shoplist/shopRank/pcChannelRankingV2?rankId=7acb1683f1cc89810888f620c792da28"
#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
返回数据
通过自定义切片器可以看到各个商圈的消费情况,具体分析略~~~。