# 如何用Python代碼爬取美食網信息
在當今互聯網時代,美食網站蘊藏著大量有價值的菜譜、餐廳評價和飲食文化數據。本文將詳細介紹如何使用Python爬蟲技術獲取這些信息,并提供完整的代碼示例和注意事項。
## 一、準備工作
### 1.1 安裝必要庫
```python
pip install requests beautifulsoup4 pandas
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
形式
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 []
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
def save_to_csv(data, filename='food_data.csv'):
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding='utf_8_sig')
def clean_data(df):
# 去除重復項
df = df.drop_duplicates()
# 價格字段處理
df['price'] = df['price'].str.replace('¥', '').astype(float)
return df
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'
}
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)}條美食數據")
/robots.txt
文件提示:本文示例代碼需根據實際目標網站結構調整選擇器,建議先使用瀏覽器開發者工具(F12)分析網頁結構后再編寫具體爬取邏輯。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。