環境介紹:
- python 3.6
- pycharm 安裝包 安裝教程 使用教程 激活碼 插件(翻譯插件/漢化插件/主題)
- Jupyter Notebook
爬蟲知識點
- 動態資料抓包演示
- json資料決議
- requests模塊的使用
- 保存csv
爬蟲代碼實作程序
- 發送請求, 對于找到資料包發送請求
- 獲取資料, 根據服務器給你回傳的response資料來的
- 決議資料, 提取我們想要的內容資料
- 保存資料, 保存到csv檔案
【付費VIP完整版】只要看了就能學會的教程,80集Python基礎入門視頻教學
匯入模塊
import requests # 資料請求 第三方模塊 pip install requests import pprint # 格式化輸出模塊 import csv # csv模塊 import time # 時間模塊
發送請求
url = 'https://apimobile.meituan.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', } # 請求頭: 把python代碼進行偽裝成瀏覽器 [披著羊皮的狼] 封IP 就用IP代理更換IP # 請求頭 都是可以從開發者工具里面直接復制粘貼 # ser-Agent: 瀏覽器的基本資訊 # Referer: 防盜鏈 告訴服務器我們發送的請求是哪里來的 比如: 西游記唐僧[來自動土大唐的和尚][唐朝比較盛世] headers = { 'Referer': 'https://chs.meituan.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)
決議資料
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)
保存資料
f = open('烤肉資料1.csv', mode='a', encoding='utf-8', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '店鋪名稱', '店鋪評分', '評論數量', '人均消費', '所在商圈', '店鋪型別', '詳情頁', ]) csv_writer.writeheader() # 寫入表頭
運行代碼,展示結果

對于本篇文章有疑問,或者想要資料集的同學也可以加【資料白嫖、解答交流群:1039649593】
資料可視化展示
匯入資料
import pandas as pd import numpy as np from pyecharts.charts import * from pyecharts import options as opts from pyecharts.globals import ThemeType #引入主題 df = pd.read_csv('烤肉資料.csv',encoding='utf-8',engine="python") df.sample(5)

店鋪評分
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.rcParams['font.sans-serif'] = ['SimHei'] # 設定加載的字體名 plt.rcParams['axes.unicode_minus'] = False # 解決保存影像是負號'-'顯示為方塊的問題 fig,axes=plt.subplots(2,1,figsize=(12,12)) sns.regplot(x='人均消費',y='店鋪評分',data=https://www.cnblogs.com/qshhl/archive/2021/09/23/df,color='r',marker='+',ax=axes[0]) sns.regplot(x='評論數量',y='店鋪評分',data=https://www.cnblogs.com/qshhl/archive/2021/09/23/df,color='g',marker='*',ax=axes[1])

商圈烤肉店數量top10
df2 = df.groupby('所在商圈')['店鋪名稱'].count() df2 = df2.sort_values(ascending=True)[-10:] df2 = df2.round(2) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add_xaxis(df2.index.tolist()) .add_yaxis("",df2.tolist()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="商圈烤肉店數量top10",subtitle="資料來源:美團",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()

不同評分型別店鋪數量
df4 = df.groupby('評分型別')['店鋪名稱'].count() df4 = df4.sort_values(ascending=False) regions = df4.index.tolist() values = df4.tolist() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add("", [z for z in zip(regions,values)]) .set_global_opts(title_opts=opts.TitleOpts(title="不同評分型別店鋪數量",subtitle="資料來源:美團",pos_top="-1%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)) ) c.render_notebook()

不同店鋪型別店鋪數量
df6 = df.groupby('店鋪型別')['店鋪名稱'].count() df6 = df6.sort_values(ascending=False)[:10] df6 = df6.round(2) regions = df6.index.tolist() values = df6.tolist() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add("", [i for i in zip(regions,values)],radius=["40%", "75%"]) .set_global_opts(title_opts=opts.TitleOpts(title="不同店鋪型別店鋪數量",pos_top="-1%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}",font_size=18)) ) c.render_notebook()

不同店鋪型別評分
df6 = df.groupby('店鋪型別')['店鋪評分'].mean() df6 = df6.sort_values(ascending=True) df6 = df6.round(2) df6 = df6.tail(10) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add_xaxis(df6.index.tolist()) .add_yaxis("",df6.tolist()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="不同店鋪型別評分",subtitle="資料來源:美團",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()

不同店鋪型別評論人數
df7 = df.groupby('店鋪型別')['評論數量'].sum() df7 = df7.sort_values(ascending=True) df7 = df7.tail(10) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add_xaxis(df7.index.tolist()) .add_yaxis("",df7.tolist()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="不同店鋪型別評論人數",subtitle="資料來源:美團",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/302361.html
標籤:其他
