匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

【Python 爬虫案例】如何爬取豆瓣 Top 250 电影数据?

【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爬虫。当然,我们在爬取数据的时候一定要遵守爬虫规则,不要过度频繁地访问同一个网站,更不要进行非法的数据处理和分析行为。