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

咨询电话:4000806560

Python爬虫实战:抓取豆瓣电影Top250

Python爬虫实战:抓取豆瓣电影Top250
---

在这篇文章中,我们将一步一步介绍如何使用Python编写爬虫程序来抓取豆瓣电影Top250的信息。我们将通过抓取电影名称、评分、导演、演员和简介等信息来构建一个电影数据库。

1. 确定目标URL

首先,我们需要确定目标URL,也就是豆瓣电影Top250的页面地址。URL地址为:https://movie.douban.com/top250。

2. 发送请求获取HTML

接下来,我们需要发送请求获得页面的HTML代码。我们可以使用Python的requests库来发送GET请求,并将响应的内容存储在一个变量中。

```
import requests

url = 'https://movie.douban.com/top250'
response = requests.get(url)
html = response.content
```

在这段代码中,我们首先导入了requests库。然后,我们指定了目标URL并发送了一个GET请求。最后,我们将响应的内容存储在一个变量中。

3. 解析HTML代码

我们已经获得了页面的HTML代码,现在需要从中提取出我们需要的信息。我们可以使用Python的BeautifulSoup库来解析HTML代码。

```
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')
```

在这段代码中,我们首先导入了BeautifulSoup库。然后,我们使用这个库来解析HTML代码并将结果存储在一个变量中。

4. 获取电影列表

现在,我们需要从HTML代码中提取出电影列表。我们可以使用BeautifulSoup库的find_all()函数来查找所有的电影列表项。

```
movie_list = soup.find_all('div', class_='hd')
```

在这段代码中,我们使用find_all()函数来查找所有的class为hd的div元素。这些元素包含了电影的名称和URL地址。

5. 获取电影信息

我们已经获得了电影列表,现在需要从中提取出电影的详细信息。我们可以使用BeautifulSoup库的find()函数来查找单个元素,并使用get_text()函数来获取文本内容。

```
movies = []
for movie in movie_list:
    title = movie.find('span', class_='title').get_text()
    link = movie.find('a').get('href')
    rating = movie.find_next_sibling('div').find('span', class_='rating_num').get_text()
    director = movie.find_next_sibling('div').find('span', text='导演:').find_next_sibling('a').get_text()
    actors = [actor.get_text() for actor in movie.find_next_sibling('div').find_all('a', limit=3)[-3:]]
    summary = movie.find_next_sibling('div').find('span', class_='inq').get_text()
    movies.append({'title': title, 'link': link, 'rating': rating, 'director': director, 'actors': actors, 'summary': summary})
```

在这段代码中,我们首先定义了一个空列表用于存储电影信息。然后,我们遍历电影列表,并使用find()函数来查找每个电影的详细信息。我们从中提取出电影名称、URL地址、评分、导演、演员和简介等信息,并将这些信息存储在一个字典中。最后,我们将这个字典添加到电影列表中。

6. 存储数据

我们已经成功地抓取了电影信息。现在,我们需要将这些信息存储在一个数据库中,以便以后使用。我们可以使用Python的sqlite3库来创建和管理数据库。

```
import sqlite3

connection = sqlite3.connect('movies.db')
cursor = connection.cursor()

cursor.execute('CREATE TABLE movies (id INTEGER PRIMARY KEY, title TEXT, link TEXT, rating REAL, director TEXT, actor1 TEXT, actor2 TEXT, actor3 TEXT, summary TEXT)')

for i, movie in enumerate(movies):
    cursor.execute('INSERT INTO movies VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', (i+1, movie['title'], movie['link'], movie['rating'], movie['director'], movie['actors'][0], movie['actors'][1], movie['actors'][2], movie['summary']))

connection.commit()
connection.close()
```

在这段代码中,我们首先导入了sqlite3库。然后,我们使用这个库来创建一个名为movies.db的数据库,并定义了一个名为movies的表,用于存储电影信息。我们使用enumerate()函数来为每个电影分配一个唯一的ID。最后,我们将电影信息插入到数据库中,并使用commit()函数来提交更改。最后,我们关闭数据库连接。

7. 结论

在本文中,我们介绍了如何使用Python编写爬虫程序来抓取豆瓣电影Top250的信息。我们通过抓取电影名称、评分、导演、演员和简介等信息来构建了一个电影数据库。我们还介绍了如何使用BeautifulSoup库来解析HTML代码,并使用sqlite3库来创建和管理数据库。希望这篇文章能对大家有所帮助。