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库来创建和管理数据库。希望这篇文章能对大家有所帮助。