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