1. 程式人生 > 其它 >我不就是吃點肉,應該沒事吧——爬取一座城市裡的烤肉店資料(附完整Python爬蟲程式碼)

我不就是吃點肉,應該沒事吧——爬取一座城市裡的烤肉店資料(附完整Python爬蟲程式碼)

寫在前面的一點屁話:

對於肉食主義者,吃肉簡直幸福感爆棚!特別是烤肉,看著一塊塊肉慢慢變熟,聽著烤盤上“滋滋”的聲響,這種期待感是任何其他食物都無法帶來的。如果說甜點是“乍見之歡”,那肉則是“久處不厭”。

為了造福“烤肉控”們,今天就用Python爬取一座城市的烤肉店資料,選出最適合的一家烤肉店!

準備工作

環境

  • python 3.6
  • pycharm
  • requests >>> 傳送請求 pip install requests
  • csv >>> 儲存資料

瞭解爬蟲最基本的思路

一. 資料來源分析

  1. 確定我們爬取的內容是什麼?
    爬取店鋪資料
  2. 去找這些東西是從哪裡來的
    通過開發者工具進行抓包分析, 分析資料來源
    二. 程式碼實現過程
  3. 傳送請求, 對於找到資料包傳送請求
  4. 獲取資料, 根據伺服器給你返回的response資料來的
  5. 解析資料, 提取我們想要的內容資料
  6. 儲存資料, 儲存到csv檔案
  7. 多頁爬取, 根據url地址引數變化

程式碼實現過程

  1. 傳送請求
url = 'https://apimobile.某tuan.com/group/v4/poi/pcsearch/70'
data = {
    'uuid': '6e481fe03995425389b9.1630752137.1.0.0',
    'userid': '266252179',
    'limit': '32',
    'offset': 32,
    'cateId': '-1',
    'q': '烤肉',
    'token': '4MJy5kaiY_0MoirG34NJTcVUbz0AAAAAkQ4AAF4NOv8TNNdNqymsxWRtJVUW4NjQFW35_twZkd49gZqFzL1IOHxnL0s4hB03zfr3Pg',
}
# 請求頭 都是可以從開發者工具裡面直接複製貼上
# ser-Agent: 瀏覽器的基本資訊
headers = {
    'Referer': 'https://chs.某tuan.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
}
# 傳送請求
response = requests.get(url=url, params=data, headers=headers)

200 表示請求成功 狀態碼 403 你沒有訪問許可權

2. 獲取資料

print(response.json())

3. 解析資料

result = response.json()['data']['searchResult']
# [] 列表 把裡面每個元素都提取出來 for迴圈遍歷
for index in result:
    # pprint.pprint(index)
    # f'{}' 字串格式化
    index_url = f'https://www.某tuan.com/meishi/{index["id"]}/'
    # ctrl + D
    dit = {
        '店鋪名稱': index['title'],
        '店鋪評分': index['avgscore'],
        '評論數量': index['comments'],
        '人均消費': index['avgprice'],
        '所在商圈': index['areaname'],
        '店鋪型別': index['backCateName'],
        '詳情頁': index_url,
    }
    csv_writer.writerow(dit)
    print(dit)

4. 儲存資料

f = open('烤肉資料.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '店鋪名稱',
    '店鋪評分',
    '評論數量',
    '人均消費',
    '所在商圈',
    '店鋪型別',
    '詳情頁',
])
csv_writer.writeheader() # 寫入表頭

5.翻頁

for page in range(0, 1025, 32):
    url = 'https://apimobile.某tuan.com/group/v4/poi/pcsearch/70'
    data = {
        'uuid': '6e481fe03995425389b9.1630752137.1.0.0',
        'userid': '266252179',
        'limit': '32',
        'offset': page,
        'cateId': '-1',
        'q': '烤肉',
        'token': '4MJy5kaiY_0MoirG34NJTcVUbz0AAAAAkQ4AAF4NOv8TNNdNqymsxWRtJVUW4NjQFW35_twZkd49gZqFzL1IOHxnL0s4hB03zfr3Pg',
    }

執行程式碼得到資料




完整程式碼

f = open('烤肉資料1.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '店鋪名稱',
    '店鋪評分',
    '評論數量',
    '人均消費',
    '所在商圈',
    '店鋪型別',
    '詳情頁',
])
csv_writer.writeheader() # 寫入表頭

for page in range(0, 1025, 32):
    url = 'https://apimobile.某tuan.com/group/v4/poi/pcsearch/70'
    data = {
        'uuid': '6e481fe03995425389b9.1630752137.1.0.0',
        'userid': '266252179',
        'limit': '32',
        'offset': page,
        'cateId': '-1',
        'q': '烤肉',
        'token': '4MJy5kaiY_0MoirG34NJTcVUbz0AAAAAkQ4AAF4NOv8TNNdNqymsxWRtJVUW4NjQFW35_twZkd49gZqFzL1IOHxnL0s4hB03zfr3Pg',
    }
    headers = {
        'Referer': 'https://chs.某tuan.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
    }
    # 傳送請求
    response = requests.get(url=url, params=data, headers=headers)
    # 200 表示請求成功 狀態碼 403 你沒有訪問許可權

    result = response.json()['data']['searchResult']
    # [] 列表 把裡面每個元素都提取出來 for迴圈遍歷
    for index in result:
        # pprint.pprint(index)
        # f'{}' 字串格式化
        index_url = f'https://www.meituan.com/meishi/{index["id"]}/'
        # ctrl + D
        dit = {
            '店鋪名稱': index['title'],
            '店鋪評分': index['avgscore'],
            '評論數量': index['comments'],
            '人均消費': index['avgprice'],
            '所在商圈': index['areaname'],
            '店鋪型別': index['backCateName'],
            '詳情頁': index_url,
        }
        csv_writer.writerow(dit)
        print(dit)