溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何python代碼爬取美食網信息

發布時間:2022-01-04 09:15:21 來源:億速云 閱讀:285 作者:柒染 欄目:大數據
# 如何用Python代碼爬取美食網信息

在當今互聯網時代,美食網站蘊藏著大量有價值的菜譜、餐廳評價和飲食文化數據。本文將詳細介紹如何使用Python爬蟲技術獲取這些信息,并提供完整的代碼示例和注意事項。

## 一、準備工作

### 1.1 安裝必要庫
```python
pip install requests beautifulsoup4 pandas

1.2 導入基礎模塊

import requests
from bs4 import BeautifulSoup
import pandas as pd
from urllib.parse import urljoin
import time
import random

二、分析目標網站結構

以大眾點評為例(實際使用時請遵守robots.txt規則): - 菜品頁URL通常包含/shop/和菜品ID - 關鍵信息存儲在HTML的<div class="review-wrapper">等標簽中 - 分頁參數通常為?page=2形式

三、基礎爬蟲實現

3.1 單頁數據抓取

def scrape_food_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 提取示例數據(需根據實際網站調整)
        dishes = []
        for item in soup.select('.menu-item'):
            name = item.select_one('.name').text.strip()
            price = item.select_one('.price').text.strip()
            dishes.append({'name': name, 'price': price})
            
        return dishes
        
    except Exception as e:
        print(f"Error scraping {url}: {e}")
        return []

3.2 分頁處理

def scrape_multiple_pages(base_url, max_pages=5):
    all_dishes = []
    
    for page in range(1, max_pages+1):
        url = f"{base_url}?page={page}"
        print(f"Scraping {url}...")
        all_dishes.extend(scrape_food_page(url))
        time.sleep(random.uniform(1, 3))  # 禮貌性延遲
        
    return all_dishes

四、數據存儲與處理

4.1 存儲為CSV

def save_to_csv(data, filename='food_data.csv'):
    df = pd.DataFrame(data)
    df.to_csv(filename, index=False, encoding='utf_8_sig')

4.2 數據清洗示例

def clean_data(df):
    # 去除重復項
    df = df.drop_duplicates()
    
    # 價格字段處理
    df['price'] = df['price'].str.replace('¥', '').astype(float)
    
    return df

五、反爬應對策略

5.1 請求頭偽裝

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
    'Referer': 'https://www.dianping.com/',
    'Accept-Language': 'zh-CN,zh;q=0.9'
}

5.2 使用代理IP

proxies = {
    'http': 'http://your.proxy.ip:port',
    'https': 'https://your.proxy.ip:port'
}
response = requests.get(url, headers=headers, proxies=proxies)

六、完整工作流示例

if __name__ == "__main__":
    # 示例URL(請替換為實際目標)
    base_url = "https://www.example.com/food/list"
    
    # 步驟1:爬取數據
    food_data = scrape_multiple_pages(base_url, max_pages=3)
    
    # 步驟2:數據清洗
    df = pd.DataFrame(food_data)
    clean_df = clean_data(df)
    
    # 步驟3:存儲結果
    save_to_csv(clean_df)
    print(f"成功保存{len(clean_df)}條美食數據")

七、法律與道德注意事項

  1. 遵守robots.txt:檢查目標網站的/robots.txt文件
  2. 限制請求頻率:建議設置2秒以上的間隔
  3. 商業用途:如需商用需獲得網站授權
  4. 數據版權:尊重原始數據的版權聲明

八、進階方向

  1. 使用Scrapy框架構建分布式爬蟲
  2. 配合Selenium處理動態加載內容
  3. 搭建定期爬取任務(如Airflow調度)
  4. 數據可視化分析(Matplotlib/PyEcharts)

提示:本文示例代碼需根據實際目標網站結構調整選擇器,建議先使用瀏覽器開發者工具(F12)分析網頁結構后再編寫具體爬取邏輯。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女