您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。