# Python中怎么爬取電影天堂數據
## 前言
在當今大數據時代,網絡爬蟲技術已成為獲取互聯網公開數據的重要手段。本文將以"電影天堂"(一個知名的電影資源網站)為例,詳細介紹如何使用Python構建爬蟲程序來采集電影數據。我們將從環境準備、頁面分析到代碼實現,逐步講解整個爬取流程。
---
## 一、準備工作
### 1.1 技術選型
- **Python 3.x**:推薦3.8+版本
- **Requests**:用于發送HTTP請求
- **BeautifulSoup4**:HTML解析庫
- **lxml**:解析器(比Python內置解析器更快)
- **Pandas**:數據存儲與處理(可選)
安裝依賴:
```bash
pip install requests beautifulsoup4 lxml pandas
訪問電影天堂(假設為www.example.com),觀察:
- 電影列表頁URL規律(如分頁參數)
- 詳情頁包含的信息:片名、評分、下載鏈接等
- 檢查robots.txt是否允許爬取
通過Chrome開發者工具(F12):
1. 定位電影標題的HTML標簽(通常是<a>標簽)
2. 查找分頁按鈕的CSS選擇器
3. 檢查網絡請求中的XHR接口(如果有API可直接調用)
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
def get_html(url):
try:
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = 'gb2312' # 電影天堂常用編碼
return resp.text if resp.status_code == 200 else None
except Exception as e:
print(f"請求失敗: {e}")
return None
def parse_list_page(html):
soup = BeautifulSoup(html, 'lxml')
movie_list = []
for item in soup.select('.co_content8 ul table'):
title = item.select_one('a').text.strip()
link = item.select_one('a')['href']
movie_list.append({'title': title, 'link': link})
return movie_list
def parse_detail_page(html):
soup = BeautifulSoup(html, 'lxml')
data = {
'title': soup.select_one('h1').text,
'download_links': [a['href'] for a in soup.select('#Zoom a')],
'publish_date': soup.select('.updatetime')[0].text.split(':')[-1]
}
return data
base_url = "http://www.example.com/list_{}.html"
for page in range(1, 6): # 爬取前5頁
url = base_url.format(page)
html = get_html(url)
if html:
movies = parse_list_page(html)
for movie in movies:
detail_html = get_html(movie['link'])
print(parse_detail_page(detail_html))
time.sleep(2) # 禮貌性延遲
import pandas as pd
def save_to_csv(data, filename='movies.csv'):
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding='utf_8_sig')
pymysql):import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', database='spider')
cursor = conn.cursor()
sql = """INSERT INTO movies
(title, download_url, publish_date)
VALUES (%s, %s, %s)"""
cursor.execute(sql, (data['title'], data['download_links'][0], data['publish_date']))
conn.commit()
headers = {
'User-Agent': '隨機UA',
'Referer': 'http://www.example.com/',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
proxies = {
'http': 'http://123.123.123.123:8888',
'https': 'https://123.123.123.123:8888'
}
requests.get(url, proxies=proxies)
import time
import requests
from bs4 import BeautifulSoup
import pandas as pd
class MovieHeavenSpider:
def __init__(self):
self.base_url = "http://www.example.com/list_{}.html"
self.headers = {'User-Agent': 'Mozilla/5.0'}
def run(self):
all_movies = []
for page in range(1, 3): # 演示只爬2頁
html = self.get_html(self.base_url.format(page))
if html:
movies = self.parse_list_page(html)
for movie in movies:
detail_html = self.get_html(movie['link'])
if detail_html:
all_movies.append(self.parse_detail_page(detail_html))
time.sleep(1.5)
self.save_to_csv(all_movies)
# 之前定義的方法放在這里...
if __name__ == '__main__':
spider = MovieHeavenSpider()
spider.run()
本文詳細介紹了使用Python爬取電影天堂數據的完整流程。實際開發中還需根據網站改版調整解析邏輯,建議定期維護代碼。網絡爬蟲技術是把雙刃劍,請務必遵守相關法律法規和網站的使用條款。
聲明:本文僅用于技術學習交流,所涉及網站為虛構示例,請勿用于非法用途。 “`
(注:實際文章約1450字,此處為保留核心內容的精簡版。完整實現需根據目標網站實際結構調整解析邏輯。)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。