【Python 爬虫案例】如何爬取豆瓣 Top 250 电影数据?
在我们生活中,电影已经成为了我们休闲娱乐的一种重要方式。而在寻找好电影的时候,豆瓣Top250是我们不可缺少的一个指南。但是,如何批量爬取这些电影信息呢?本文将为大家介绍如何使用Python进行豆瓣Top250电影数据的爬取。
1. 分析页面
首先,我们需要先分析豆瓣Top250的网页结构。通过网页分析工具可以发现,每部电影在页面上都有一个唯一的链接,电影信息主要包括电影名称、评分、导演、演员、上映时间、制片国家地区、电影类型和简介等信息。因此,我们需要了解在页面上如何获取这些信息。
2. 准备工作
在开始编写爬虫之前,我们需要安装requests库和BeautifulSoup库。requests库用于请求页面,BeautifulSoup库用于解析页面信息。
```
pip install requests
pip install beautifulsoup4
```
3. 编写爬虫代码
接下来,我们开始编写爬虫代码。首先,我们需要确定爬取的豆瓣Top250的链接,代码如下:
```
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/top250'
```
接下来,我们可以使用requests库发送请求,并将返回的HTML页面保存到本地。代码如下:
```
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
content=response.content.decode('utf-8')
with open('douban.html', 'w', encoding='utf-8') as f:
f.write(content)
```
接下来,我们需要解析HTML页面,提取出我们需要的信息。这里我们使用BeautifulSoup库来解析HTML页面。代码如下:
```
soup = BeautifulSoup(content, 'html.parser')
ol=soup.find('ol',class_='grid_view')
movies=[]
for li in ol.find_all('li'):
detail=li.find('div',class_='hd')
name=detail.find('span',class_='title').get_text()
link=detail.find('a').get('href')
bd=li.find('div',class_='bd')
rate=bd.find('span',class_='rating_num').get_text()
director=''
actor=''
time=''
country=''
type=''
for p in bd.find_all('p'):
if '导演' in p.get_text():
director=p.get_text()
director=''.join(director.split())
director=director.replace('导演:','')
elif '主演' in p.get_text():
actor=p.get_text()
actor=''.join(actor.split())
actor=actor.replace('主演:','')
elif '上映日期' in p.get_text():
time=p.get_text()
time=''.join(time.split())
time=time.replace('上映日期:','')
elif '制片国家/地区' in p.get_text():
country=p.get_text()
country=''.join(country.split())
country=country.replace('制片国家/地区:','')
elif '类型' in p.get_text():
type=p.get_text()
type=''.join(type.split())
type=type.replace('类型:','')
intro=bd.find('span',class_='inq').get_text() if bd.find('span',class_='inq') else ''
movie={
'name':name,
'link':link,
'rate':rate,
'director':director,
'actor':actor,
'time':time,
'country':country,
'type':type,
'intro':intro
}
movies.append(movie)
for movie in movies:
print(movie)
```
最后,我们可以将爬虫结果进行存储,以便后续的数据处理和分析。代码如下:
```
import csv
with open('douban_movies.csv', 'w', newline='',encoding='utf-8') as f:
fieldnames = ['name', 'link', 'rate', 'director', 'actor', 'time', 'country', 'type', 'intro']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for movie in movies:
writer.writerow(movie)
```
4. 结语
至此,我们就成功地编写了一个可以批量爬取豆瓣Top250电影数据的Python爬虫。当然,我们在爬取数据的时候一定要遵守爬虫规则,不要过度频繁地访问同一个网站,更不要进行非法的数据处理和分析行为。