用python抓取餓了么無證店鋪

一唐础、前言

餓了么平臺上很多店鋪都無營業(yè)執(zhí)照悟衩,只能借用他人的營業(yè)執(zhí)照上傳開店剧罩。那就想看看附近有多少這樣無證共用營業(yè)執(zhí)照的店鋪。

先看一下抓取的截圖局待,竟然有這么多店沒有營業(yè)執(zhí)照斑响。


mongodb3.png

在餓了么上顯示的地址都是營業(yè)執(zhí)照的地址,有時(shí)候當(dāng)你點(diǎn)餐會看到送餐員取餐的地址不是營業(yè)執(zhí)照標(biāo)注的地址钳榨。
通常這種店鋪都是無營業(yè)執(zhí)照的,因?yàn)榈赇伬习宥伎梢栽诤笈_自行設(shè)置取餐地址纽门,所以用戶在點(diǎn)餐時(shí)候看到不一定是真實(shí)地址薛耻,在下單后才能具體取餐地址。
還有一種店鋪是自行配送的赏陵,下單后根本就看不到取餐地址饼齿,這種店鋪更可怕,根本就不知道是哪個黑作坊加工的食品蝙搔。

二缕溉、運(yùn)行環(huán)境

  • python3
  • pymongo
  • requests

三、分析

首先訪問餓了么主頁吃型,輸入想搜尋的區(qū)域证鸥,頁面隨即返回附近區(qū)域店鋪。

address.png

頁面瀏覽器地址如下:
https://www.ele.me/place/wtw39y8614v4?latitude=31.237236&longitude=121.36636

打開瀏覽器開發(fā)者工具,分析需要抓取的數(shù)據(jù)枉层,接著用requests抓取該頁面地址泉褐,使用BeautifulSoup解析數(shù)據(jù),竟然返回空值數(shù)據(jù)鸟蜡。
再次查看頁面信息膜赃,向下滾動頁面,發(fā)現(xiàn)XHR異步加載類型中有返回JSON格式數(shù)據(jù)揉忘。如下圖所示:


F12.png

后臺用json格式傳遞數(shù)據(jù)跳座,前臺瀏覽器用javascript展示json格式的方法,是目前比較通用的做法泣矛。后臺提供的json格式的api接口可以供網(wǎng)頁躺坟、手機(jī)調(diào)用,屬于restful風(fēng)格乳蓄。這樣只需要開發(fā)和維護(hù)一套后臺咪橙,簡化系統(tǒng)架構(gòu)。
雖然用requests抓取不到頁面虚倒,但json格式可以更方便的采集我們需要數(shù)據(jù)美侦。

1、抓取數(shù)據(jù)

分析JSON頁面地址:
https://www.ele.me/restapi/shopping/restaurants?extras[]=activities&geohash=wtw39y8614v4&latitude=31.237236&limit=24&longitude=121.36636&offset=24&terminal=web

其中參數(shù):
1魂奥、longitude菠剩,latitude采用的高德坐標(biāo)系對應(yīng)搜索區(qū)域的經(jīng)緯度
2、limit=24 每次限制返回上限24個店鋪耻煤;設(shè)置再多后臺最多返回30個
3具壮、offset=24 每次返回的店鋪數(shù)量,24個數(shù)量級增加哈蝇,比如頁面繼續(xù)往下翻offset=48,72……
用循環(huán)增加offset的偏移量棺妓,就可以得到更多的店鋪數(shù)據(jù)。

此頁面我們需要采集name ,phone, address 即商戶名稱炮赦,電話怜跑,營業(yè)地址三個數(shù)據(jù)即可。一個頁面可以采集24個商家數(shù)據(jù)吠勘,json數(shù)據(jù)如下圖:


detail.png

代碼如下:

import requests
import json
url='https://www.ele.me/restapi/shopping/restaurants?extras[]=activities&geohash=wtw39y8614v4&latitude=31.237236&limit=24&longitude=121.36636&offset=24&terminal=web'
r=requests.get(url).text
d=json.loads(r)
for v in d:
    print (v['name'],v['phone'],v['address'])

返回結(jié)果如下:


single_page.png

設(shè)置offset=48性芬,期望得到更多商家,返回結(jié)果如下:

{'message': '登陸后查看更多商家', 'name': 'UNAUTHORIZED_MORE_RESTAURANTS_ERROR'}

這是因?yàn)楹笈_設(shè)置了需要登錄才能訪問更多商家數(shù)據(jù)剧防。

2植锉、設(shè)置cookies登錄

我們需要在訪問請求中添加cookies信息,讓后臺認(rèn)為我們已登錄峭拘。前提是用于已注冊賬號并登錄俊庇,在開發(fā)者工具中打開->網(wǎng)絡(luò)->消息頭->cookies狮暑,復(fù)制cookies數(shù)據(jù)。


cookies.png

cookies數(shù)據(jù)處理成字典格式暇赤,這里部分cookies用***代替

cookies_str='ubt_ssid=pwppg5un1gd56zefxvx**********e_2017-11-17; _utrace=f550e02b0883e3b96b3c8e7d9b9801a9_2017-11-17; perf_ssid=7rulhdqct6md********************; eleme__ele_me=1cc2663f830938c9104e9f6f5ae73a10%3A6e49f5779ec4bca5c1f1c4a352b22d05cd8568f6; USERID=578****'
cookies={}
for i in cookies_str.split(';'):
    k,v=i.strip().split('=')
    cookies[k]=v

把之前request的get方法中也略微修改心例,增加cookies信息登錄

r=requests.get(url,cookies=cookies).text
3、循環(huán)設(shè)置offset偏移量后鞋囊,生成URL新地址
    i=j=1
    for i in range(30):
        j=i*24
        url='https://www.ele.me/restapi/shopping/restaurants?extras[]=activities&geohash=wtw39y84pc8&latitude=31.23723&limit=24&longitude=121.3663&offset='+str(j)+'&terminal=web'
        return url
4止后、數(shù)據(jù)插入Mongodb
from pymongo import MongoClient
client=MongoClient('127.0.0.1')
db=client['elm']
col=db['resturant']

四、代碼截圖

code.png

代碼訪問 我的GITHUB

五溜腐、結(jié)果顯示

在mongodb中按照地址排序译株,sort({address:1}) 按照地址升序排序


mongodb3.png
mongodb2.png
mongodb1.png

從結(jié)果看餓了么很多商鋪都沒有營業(yè)執(zhí)照,餓了么也是睜只眼閉只眼挺益,畢竟可以從每家店鋪收取20%的服務(wù)器歉糜,而且有些店月銷量可達(dá)幾千單,哪個平臺愿意自斷財(cái)路望众。

六匪补、改進(jìn)目標(biāo)

1、登錄用戶名和密碼保存cookies
2烂翰、以訂餐地址方圓20公里定位獲取更多餐廳信息
3夯缺、獲取店鋪實(shí)際取餐地址更精確判斷。
4甘耿、獲取區(qū)域內(nèi)熱銷商品踊兜,活動營銷。
5佳恬、使用Flask模塊web方式顯示數(shù)據(jù)捏境。
5、接入微信公眾號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毁葱,一起剝皮案震驚了整個濱河市垫言,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌头谜,老刑警劉巖骏掀,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柱告,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笑陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門际度,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涵妥,你說我怎么就攤上這事乖菱。” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵窒所,是天一觀的道長鹉勒。 經(jīng)常有香客問我,道長吵取,這世上最難降的妖魔是什么禽额? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮皮官,結(jié)果婚禮上脯倒,老公的妹妹穿的比我還像新娘。我一直安慰自己捺氢,他們只是感情好藻丢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摄乒,像睡著了一般悠反。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馍佑,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天斋否,我揣著相機(jī)與錄音,去河邊找鬼挤茄。 笑死如叼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的穷劈。 我是一名探鬼主播笼恰,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歇终!你這毒婦竟也來了鳖轰?” 一聲冷哼從身側(cè)響起释牺,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戚篙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婉刀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年损话,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翎碑。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谬返,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出日杈,到底是詐尸還是另有隱情遣铝,我是刑警寧澤佑刷,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站酿炸,受9級特大地震影響瘫絮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜填硕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一麦萤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廷支,春花似錦频鉴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至施敢,卻和暖如春周荐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僵娃。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工概作, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人默怨。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓讯榕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匙睹。 傳聞我的和親對象是個殘疾皇子愚屁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)痕檬,斷路器霎槐,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,074評論 25 707
  • 1. 通過adb shell進(jìn)入到手機(jī)data/data目錄下,查看包名(需要root) 如果提示opendir ...
    小小小小筱閱讀 20,497評論 0 3
  • 最近我發(fā)現(xiàn)每一個人在事業(yè)進(jìn)階的道路上都會經(jīng)歷三個過程梦谜。即聽別人的故事丘跌,講自己的故事,別人講我們的故事唁桩。為什么呢闭树? ...
    小坤爸閱讀 385評論 0 0
  • 嚴(yán)格說來,我并沒有真正旅行過荒澡。因?yàn)槲覜]有用上多少錢蔼啦、乘一趟飛機(jī)或是坐上多久的車、到達(dá)多遠(yuǎn)的地方——為欣賞一...
    宜室可宜家閱讀 403評論 0 2