我不就是吃點肉,應該沒事吧——爬取一座城市裡的烤肉店資料(附完整Python爬蟲程式碼)
阿新 • • 發佈:2022-04-12
寫在前面的一點屁話:
對於肉食主義者,吃肉簡直幸福感爆棚!特別是烤肉,看著一塊塊肉慢慢變熟,聽著烤盤上“滋滋”的聲響,這種期待感是任何其他食物都無法帶來的。如果說甜點是“乍見之歡”,那肉則是“久處不厭”。
為了造福“烤肉控”們,今天就用Python爬取一座城市的烤肉店資料,選出最適合的一家烤肉店!
準備工作
環境
- python 3.6
- pycharm
- requests >>> 傳送請求 pip install requests
- csv >>> 儲存資料
瞭解爬蟲最基本的思路
一. 資料來源分析
- 確定我們爬取的內容是什麼?
爬取店鋪資料 - 去找這些東西是從哪裡來的
通過開發者工具進行抓包分析, 分析資料來源
二. 程式碼實現過程 - 傳送請求, 對於找到資料包傳送請求
- 獲取資料, 根據伺服器給你返回的response資料來的
- 解析資料, 提取我們想要的內容資料
- 儲存資料, 儲存到csv檔案
- 多頁爬取, 根據url地址引數變化
程式碼實現過程
- 傳送請求
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)