0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

中午不知道吃什么,用Python爬取美團(tuán)外賣評(píng)論幫你選餐

馬哥Linux運(yùn)維 ? 來源:YXQ ? 2019-03-26 15:43 ? 次閱讀

一、介紹

朋友暑假實(shí)踐需要美團(tuán)外賣APP評(píng)論這一份數(shù)據(jù),一開始我想,這不就抓取網(wǎng)頁源代碼再?gòu)闹刑崛?shù)據(jù)就可以了嗎,結(jié)果發(fā)現(xiàn)事實(shí)并非如此,情況和之前崔大講過的分析Ajax來抓取今日頭條街拍美圖類似,都是通過異步加載的方式傳輸數(shù)據(jù),不同的是這次的是通過JS傳輸,其他的基本思路基本一致,希望那些數(shù)據(jù)能幫到她吧

二、流程

目標(biāo)站點(diǎn)分析用瀏覽器打開美團(tuán)外賣APP評(píng)論,F(xiàn)12

1.首先我們要找到我們想要的評(píng)論數(shù)據(jù),在第一次“失敗”的直接抓取網(wǎng)頁源代碼后,我們發(fā)現(xiàn)它是通過Ajax加載的,我們點(diǎn)擊JS選項(xiàng),可以發(fā)現(xiàn)JS項(xiàng)目里面的返回結(jié)果有我們想要的數(shù)據(jù),勾選Preserve log,當(dāng)點(diǎn)擊查看更多評(píng)論時(shí),后臺(tái)(JS里)會(huì)出現(xiàn)新的Ajax請(qǐng)求,發(fā)現(xiàn)還有參數(shù)start和的變化,其他請(qǐng)求參數(shù)不變,start的參數(shù)變化是以10遞增的,的參數(shù)變化可就讓人摸不著頭腦(這個(gè)時(shí)候我們也不要方,因?yàn)榇蠖嗲闆r下沒有規(guī)律的參數(shù)都是沒用的)

2.經(jīng)過我們對(duì)http://comment.mobilem.#/comment/getComments?callback=jQuery17203361018749253357_1503362214558&baike=%E7%BE%8E%E5%9B%A2%E5%A4%96%E5%8D%96+Android_com.sankuai.meituan.takeoutnew&c=message&a=getmessage&start=0&count=10&_=1503362215647進(jìn)行分析后發(fā)現(xiàn)它的標(biāo)準(zhǔn)式為‘http://comment.mobilem.#/comment/getComments?&baike=%E7%BE%8E%E5%9B%A2%E5%A4%96%E5%8D%96+Android_com.sankuai.meituan.takeoutnew&start=’+str(i*10),i每次增加1,就包含新的十條評(píng)論的內(nèi)容,所以我們通過改變i的值就可以拿到不同的數(shù)據(jù)

分析url的網(wǎng)頁源代碼,在源代碼里有我們想要的評(píng)論數(shù)據(jù),我們可以用正則(在這里正則還是比較好用的)把我們想要的信息弄下來

開啟循環(huán),批量抓取

保存數(shù)據(jù)至文本和數(shù)據(jù)庫(kù)

#之前是這樣處理的:def parse_one_page(html):    pattern2 = re.compile('"m_type":"0",(.*?),"username"', re.S)    items=re.findall(pattern2,html)    for item in items:        item = "{" + item + "}"        item=json.loads(item)        write_to_file(item)        print(item)        save_to_mongo(item)#皮皮哥告訴了我他的獨(dú)家正則匹配方法可以匹配出來,這樣的確獲得的item沒有編碼問題def parse_one_page(html):    pattern = '"content":".*?"'    items=re.findall(pattern,html)    for item in items:        item =eval(item.split(':',1)[1])        write_to_file(item)        print(item)        save_to_mongo(item)#對(duì)一般正則寫法獲得的item進(jìn)行的方法,這是從皮皮哥那里得知的,親測(cè)有效def parse_one_page(html):    pattern = re.compile('rsion_name".*?"content":(.*?),"username"', re.S)    items=re.findall(pattern,html)    #print(items)    for item in items:        item = item.encode('utf-8').decode('unicode_escape')        write_to_file(item)        print(item)        save_to_mongo(item)
三、代碼
#config.pyMONGO_URL='localhost'MONGO_DB='meituan'MONGO_TABLE='meituan'
import requestsfrom requests.exceptions import RequestExceptionimport jsonimport refrom day31.config import *import pymongoclient=pymongo.MongoClient(MONGO_URL)db=client[MONGO_DB]base_url='http://comment.mobilem.#/comment/getComments?callback=jQuery17209056727722758744_1502991196139&baike=%E7%BE%8E%E5%9B%A2%E5%A4%96%E5%8D%96+Android_com.sankuai.meituan.takeoutnew&start='def the_url(url):    try:        response = requests.get(url)        if response.status_code==200:            response.encoding='utf-8'            return response.text        return None    except RequestException:        print('請(qǐng)求出錯(cuò)')        return Nonedef the_total():    html=the_url(base_url)    pattern1 = re.compile('"total":(.*?),"messages"', re.S)    Total = re.findall(pattern1, html)    Total=int(':'.join(Total))    #print(type(Total))    show='總計(jì)評(píng)論%d條'%Total    print(show)    write_to_file(show)    return Totaldef parse_one_page(html):    pattern2 = re.compile('"m_type":"0",(.*?),"username"', re.S)    items=re.findall(pattern2,html)    for item in items:        item = "{" + item + "}"        item=json.loads(item)        write_to_file(item)        print(item)        save_to_mongo(item)def save_to_mongo(result):    try:        if db[MONGO_TABLE].insert(result):            print('儲(chǔ)存到MongoDB成功',result)    except Exception:        print('儲(chǔ)存到MongoDB失敗',result)def write_to_file(content):    with open('meituan_result.text','a',encoding='utf-8') as f:        f.write(json.dumps(content,ensure_ascii=False)+'\n')        f.close()def main():    Total=the_total()    Total=int(Total/10)+2    for i in range(Total):        url = base_url + str(i*10)        if the_url(url)!=None:            html=the_url(url)            parse_one_page(html)        else:            print('輸完啦')    ps='PS:因?yàn)橛行┰u(píng)論空,所以實(shí)際評(píng)論比抓取的少'   #這是我瞎猜的    write_to_file(ps)    print(ps)if __name__ == '__main__':    main()

四、最后得到的數(shù)據(jù)視圖和文件

五、總結(jié)

1.程序報(bào)錯(cuò)很正常,不要一報(bào)錯(cuò)就問別人,先自己思考、百度

2.在數(shù)據(jù)類型處理方面的知識(shí)還要加強(qiáng)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2946

    瀏覽量

    66830
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84855

原文標(biāo)題:中午不知道吃什么?用Python爬取美團(tuán)外賣評(píng)論幫你選餐!

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    想用AMC1203做電流采樣,AMC1210做SINC濾波,不知道這樣可不可行?

    想用AMC1203做電流采樣,AMC1210做SINC濾波,不知道這樣可不可行? 網(wǎng)上有帖子說AMC1210有問題,你們不推薦采用AMC1210做SINC濾波,而是推薦采用CPLD做SINC濾波,不知道是不是真的?
    發(fā)表于 01-14 07:22

    校園點(diǎn)訂餐外賣跑腿Java源碼

    創(chuàng)建一個(gè)校園點(diǎn)訂餐外賣跑腿系統(tǒng)是一個(gè)復(fù)雜的項(xiàng)目,涉及到前端、后端、數(shù)據(jù)庫(kù)設(shè)計(jì)等多個(gè)方面。在這里,我可以提供一個(gè)簡(jiǎn)化的Java后端示例,使用Spring Boot框架來搭建一個(gè)基本的API服務(wù)。這個(gè)
    的頭像 發(fā)表于 12-24 14:55 ?151次閱讀
    校園點(diǎn)<b class='flag-5'>餐</b>訂餐<b class='flag-5'>外賣</b>跑腿Java源碼

    華為Mate系列新品攜手團(tuán)外賣首發(fā)

    華為公司近日宣布,將于11月26日正式發(fā)布Mate70系列與Mate X6等多款新品。此次發(fā)布會(huì)不僅吸引了眾多科技愛好者的關(guān)注,更值得一提的是,華為與團(tuán)外賣達(dá)成合作,將開創(chuàng)電子產(chǎn)品零售的新模式
    的頭像 發(fā)表于 11-26 10:46 ?256次閱讀

    關(guān)于陶瓷電路板你不知道的事

    陶瓷電路板(Ceramic Circuit Board),又稱陶瓷基板,是一種以陶瓷材料為基體,通過精密的制造工藝在表面形成電路圖形的高技術(shù)產(chǎn)品,快來看看哪些是您還不知道的事?
    的頭像 發(fā)表于 10-21 11:55 ?386次閱讀
    關(guān)于陶瓷電路板你<b class='flag-5'>不知道</b>的事

    又一電工不知道,施耐德變頻器怎么復(fù)位,如果不告訴你,你知道怎么復(fù)位嗎?

    維修 我給他說,可能以前沒接觸過施耐德的變頻器,就不知道它還有一個(gè)蓋子,要復(fù)位的話,就要把蓋子打開,第一次找不到也正常,要是經(jīng)常斷電重啟的話,對(duì)設(shè)備不好。 變頻器修理 之所以分享給大家,就是想告訴那些沒接觸過施耐
    的頭像 發(fā)表于 10-12 15:15 ?307次閱讀
    又一電工<b class='flag-5'>不知道</b>,施耐德變頻器怎么復(fù)位,如果不告訴你,你<b class='flag-5'>知道</b>怎么復(fù)位嗎?

    FDA的壓擺率都太高,TPA6133的SR只有0.4V/us,不知道這樣搭配會(huì)對(duì)20-20K音頻范圍產(chǎn)生什么影響?

    準(zhǔn)備搭棚一個(gè)聲卡自己玩,了一些便宜、5V運(yùn)作、結(jié)構(gòu)簡(jiǎn)單的材料,但就一個(gè)問題卡住。。。 FDA的壓擺率都太高,TPA6133的SR只有0.4V/us,不知道這樣搭配會(huì)對(duì)20-20K音頻范圍產(chǎn)生什么影響??產(chǎn)生的影響有沒有解決方法?? 設(shè)想結(jié)構(gòu)如圖所示
    發(fā)表于 08-23 06:40

    新手嘗試做一個(gè)LED驅(qū)動(dòng)電路,不知道電路有沒有問題

    TP8006穩(wěn)流驅(qū)動(dòng),最后留出LED插口。 因?yàn)椴皇呛芏布O(shè)計(jì),不知道做的模塊能不能行,很希望各位提提意見,讓我認(rèn)識(shí)認(rèn)識(shí)硬件設(shè)計(jì)上的缺陷。
    發(fā)表于 07-24 18:35

    電距離什么檢測(cè)設(shè)備

    電距離是指在電氣設(shè)備中,不同電位的導(dǎo)體之間,通過絕緣材料隔離的最短距離。電距離的檢測(cè)對(duì)于確保電氣設(shè)備的安全運(yùn)行至關(guān)重要。本文將介紹電距離的檢測(cè)設(shè)備及其使用方法。 一、電距離檢測(cè)
    的頭像 發(fā)表于 07-12 15:37 ?634次閱讀

    Win10 vscode中無法編譯,提示python.exe: command not found怎么解決?

    電腦中已經(jīng)刪除之前安裝的python,環(huán)境變量也添加了報(bào)錯(cuò)內(nèi)容中要求的python路徑,我git bash、cmd也是可以打開python的,證明環(huán)境變量是已經(jīng)正確設(shè)置了 應(yīng)該是
    發(fā)表于 06-07 06:42

    這些你不知道的臥式共模電感的選型依據(jù)

    這些你不知道的臥式共模電感的選型依據(jù) gujing 編輯:谷景電子 實(shí)際上關(guān)于臥式共模電感的選型已經(jīng)有討論過很多這方面的內(nèi)容,但一直都還有人在討論這些問題。本篇我們換幾個(gè)角度來探討一下臥式共模電感
    的頭像 發(fā)表于 04-29 22:42 ?376次閱讀

    STM32F4JSCOPE參數(shù)的時(shí)候float類型的不了是為什么?

    有人遇到這種問題嗎,JSCOPE參數(shù)的時(shí)候float類型的不了,不知道什么原因
    發(fā)表于 04-15 06:14

    STM32F030F4串口空閑中斷接收不定長(zhǎng)數(shù)據(jù),發(fā)生中斷后不知道如何計(jì)算接收到的字節(jié)數(shù)?

    STM32F030F4串口空閑中斷接收不定長(zhǎng)數(shù)據(jù),發(fā)生中斷后不知道怎樣計(jì)算接收到的字節(jié)數(shù)。
    發(fā)表于 04-03 07:12

    輥壓機(jī)軸承位磨損修復(fù)你不知道的那些事

    電子發(fā)燒友網(wǎng)站提供《輥壓機(jī)軸承位磨損修復(fù)你不知道的那些事.docx》資料免費(fèi)下載
    發(fā)表于 03-12 15:10 ?0次下載

    昨天看到消息Altera從Intel獨(dú)立出來了,不知道大家常用的FPGA是什么?

    昨天看到消息Altera從Intel獨(dú)立出來了,不知道大家常用的FPGA是什么?我這邊分成常規(guī)生產(chǎn)治具是altera的,算法和圖像相關(guān)的使用的是Xilinx的;
    發(fā)表于 03-06 13:39

    團(tuán)取得構(gòu)建高精地圖專利

    團(tuán)取得構(gòu)建高精地圖專利 團(tuán)日前取得“一種構(gòu)建高精地圖的方法及裝置“的專利,這種構(gòu)建高精地圖的方法可以使得高精度與低精度的點(diǎn)云數(shù)據(jù)可以合并至同一坐標(biāo)系下;以提高局部高精地圖的生成效率。
    的頭像 發(fā)表于 02-26 16:20 ?524次閱讀