外賣必不可少,咋確定好不好吃呢~ python采集數據信息

所需知識點

1、動態數據抓包演示
2、json數據解析
3、requests模塊的使用
4、保存csv

安裝命令:requests >>> pip install requests


模塊安裝問題:

如果安裝python第三方模塊:

  1. win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
  2. 在pycharm中點擊Terminal(終端) 輸入安裝命令



如何配置pycharm里面的python解釋器?

  1. 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
  2. 點擊齒輪, 選擇add
  3. 添加python安裝路徑

pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設置) >>> Plugins(插件)
  2. 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
  3. 選擇相應的插件點擊 install(安裝) 即可
  4. 安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效

案例實現思路流程: 可見即可爬...

一. 數據來源分析

通過開發者工具進行抓包分析, 分析自己想要數據內容 可以從哪里獲取

分析數據 從第二頁開始

  1. 打開開發者工具
  2. 點擊第二頁內容
  3. 點擊搜索按鈕, 進行搜索內容
  4. 查看服務器返回響應數據內容

二. 代碼實現步驟: 發送請求 >>> 獲取數據 >>> 解析數據 >>> 保存數據

用代碼去模擬瀏覽器發送請求獲取數據

  1. 發送請求, 對于剛剛分析得到url地址發送請求
  2. 獲取數據, 獲取服務器返回數據
  3. 解析數據, 提取我們想要數據內容 店鋪基本信息
  4. 保存數據, 把數據表格里面

代碼

1.導入模塊

import requests  # 數據請求模塊
import pprint  # 格式化輸出模塊
import csv  # 內置模塊
import time
import re
def get_shop_info(html_url):
    # url = 'https://www.meituan.com/xiuxianyule/193306807/'
    headers = {
        'Cookie': '_lxsdk_cuid=17e102d3914c8-000093bbbb0ed8-4303066-1fa400-17e102d3914c8; __mta=48537241.1640948906361.1640948906361.1640948906361.1; _hc.v=e83bebb5-d6ee-d90e-dd4b-4f2124f8f982.1640951715; ci=70; rvct=70; mt_c_token=2Tmbj8_Qihel3QR9oEXS4nEpnncAAAAABBEAAB9N2m2JXSE0N6xtRrgG6ikfQZQ3NBdwyQdV9vglW8XGMaIt38Lnu1_89Kzd0vMKEQ; iuuid=3C2110909379198F1809F560B5E33A58B83485173D8286ECD2C7F8AFFCC724B4; isid=2Tmbj8_Qihel3QR9oEXS4nEpnncAAAAABBEAAB9N2m2JXSE0N6xtRrgG6ikfQZQ3NBdwyQdV9vglW8XGMaIt38Lnu1_89Kzd0vMKEQ; logintype=normal; cityname=%E9%95%BF%E6%B2%99; _lxsdk=3C2110909379198F1809F560B5E33A58B83485173D8286ECD2C7F8AFFCC724B4; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; latlng=28.302546%2C112.868692; ci3=70; uuid=f7c4d3664ab34f13ad7f.1650110501.1.0.0; mtcdn=K; lt=9WbeLmhHHLhTVpnVu264fUCMYeIAAAAAQREAAKnrFL00wW5eC7mPjhHwIZwkUL11aa7lM7wOfgoO53f0uJpjKSRpO6LwCBDd9Fm-wA; u=266252179; n=qSP946594369; token2=9WbeLmhHHLhTVpnVu264fUCMYeIAAAAAQREAAKnrFL00wW5eC7mPjhHwIZwkUL11aa7lM7wOfgoO53f0uJpjKSRpO6LwCBDd9Fm-wA; unc=qSP946594369; firstTime=1650118043342; _lxsdk_s=18032a80c4c-4d4-d30-e8f%7C%7C129',
        'Referer': 'https://chs.meituan.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    # print(response.text)
    phone = re.findall('"phone":"(.*?)"', response.text)[0]
    # \n 不是換行符, \n符號而已  \轉義字符給轉移掉
    openTime = re.findall('"openTime":"(.*?)"', response.text)[0].replace('\\n', '')
    address = re.findall('"address":"(.*?)"', response.text)[0]
    shop_info = [phone, openTime, address]
    return shop_info


# 保存文件 創建文件夾 encoding='utf-8' 指定編碼 如果說我用utf-8 還亂碼怎么辦
# w 會覆蓋, a不會覆蓋
f = open('究極無敵男人秘密最終版.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '店名',
    '人均消費',
    '最低消費',
    '商圈',
    '店鋪類型',
    '評分',
    '電話',
    '營業時間',
    '地址',
    '緯度',
    '經度',
    '詳情頁',
])
csv_writer.writeheader()  # 寫入表頭

# html_url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/70?uuid=f7c4d3664ab34f13ad7f.1650110501.1.0.0&userid=266252179&limit=32&offset=64&cateId=-1&q=%E4%BC%9A%E6%89%80&token=9WbeLmhHHLhTVpnVu264fUCMYeIAAAAAQREAAKnrFL00wW5eC7mPjhHwIZwkUL11aa7lM7wOfgoO53f0uJpjKSRpO6LwCBDd9Fm-wA'

1. 發送請求, 對于剛剛分析得到url地址發送請求 翻頁去分析請求url地址的變化規律

for page in range(0, 321, 32):  # 從0 32 64 96 128 160 192 .... 320
    time.sleep(1.5)  # 延時等待 1.5S
    url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/70'
    #  pycharm功能 快速批量替換, ctrl + R 選擇需要替換目標, 運用正則表達式進行批量替換
    data = {
        'uuid': 'f7c4d3664ab34f13ad7f.1650110501.1.0.0',
        'userid': '266252179',
        'limit': '32',
        'offset': page,
        'cateId': '-1',
        'q': '會所',
        'token': '9WbeLmhHHLhTVpnVu264fUCMYeIAAAAAQREAAKnrFL00wW5eC7mPjhHwIZwkUL11aa7lM7wOfgoO53f0uJpjKSRpO6LwCBDd9Fm-wA',
    }
    # headers 偽裝 python代碼的  外套
    # User-Agent 用戶代理 瀏覽器基本的身份信息.... 最簡單反反爬的手段 為了防止被識別是爬蟲程序
    # Referer 防盜鏈 告訴服務器我們請求url地址是從哪里跳轉過來
    headers = {
        'Referer': 'https://chs.meituan.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
    }
    response = requests.get(url=url, params=data, headers=headers)
    # print(response)  # <Response [403]> 狀態碼 表示沒有訪問權限 防盜鏈 200 請求成功
image.png

2. 獲取數據 response.text 獲取文本數據字符串數據類型 response.json() 字典數據類型

    # print(response.json())
    # pprint.pprint(response.json())  # 老師版本是 python 3.8

3. 解析數據 字典取值, 根據鍵值對取值 根據冒號左邊的內容(鍵) 提取冒號右邊的內容(值)

    searchResult = response.json()['data']['searchResult']
    for index in searchResult:  # 把列表里面數據 一個一個提取出來
        # pprint.pprint(index)
        href = f'https://www.meituan.com/xiuxianyule/{index["id"]}/'
        shop_info = get_shop_info(href)
        title = index['title']  # 店名
        price = index['avgprice']  # 人均消費
        lost_price = index['lowestprice']  # 最低消費
        area = index['areaname']  # 商圈
        shop_type = index['backCateName']  # 店鋪類型
        score = index['avgscore']  # 評分
        latitude = index['latitude']  # 緯度
        longitude = index['longitude']  # 經度  ctrl + D 快速復制
        # tab 集體縮進
        # shift + tab 取消縮進
        dit = {
            '店名': title,
            '人均消費': price,
            '最低消費': lost_price,
            '商圈': area,
            '店鋪類型': shop_type,
            '評分': score,
            '電話': shop_info[0],
            '營業時間': shop_info[1],
            '地址': shop_info[2],
            '緯度': latitude,
            '經度': longitude,
            '詳情頁': href,
        }

4. 保存數據

        csv_writer.writerow(dit)
        print(dit)

尾語

好了,我的這篇文章寫到這里就結束啦!

有更多建議或問題可以評論區或私信我哦!一起加油努力叭(? ?_?)?

喜歡就關注一下博主,或點贊收藏評論一下我的文章叭!!!


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容