Python爬虫入门教程01之爬取豆瓣Top电影
本次教程将会教你如何使用Python编写一个简单的爬虫程序,用于爬取豆瓣电影Top250的数据。本教程将会覆盖以下主题:
- 项目简介
- 准备工作
- 利用Requests模块获取网页内容
- 使用BeautifulSoup解析网页
- 代码实现
- 结束语
1. 项目简介
这个项目旨在教你如何使用Python编写一个简单的爬虫程序,用于爬取豆瓣电影Top250的数据。通过本项目,你将学会如何利用Python中的Requests和BeautifulSoup等常用库来获取和解析网页信息。本项目涵盖以下主要内容:
- 利用Requests模块请求网页信息
- 使用BeautifulSoup解析网页内容
- 解析电影名称、年份、评分等信息
- 将结果输出保存至CSV文件
2. 准备工作
在开始编写爬虫之前,需要进行一些准备工作:
- 安装Python解释器(本项目基于Python3.x版本编写)
- 安装相关库(包括Requests和BeautifulSoup)
3. 利用Requests模块获取网页内容
首先,我们需要从豆瓣电影Top250的网页上获取数据。我们将使用Python中的Requests库来请求网页信息。下面是一个简单的示例代码:
import requests
url = 'https://movie.douban.com/top250'
# 发送Get请求,获取网页内容
response = requests.get(url)
# 输出网页内容
print(response.text)
以上代码中,我们首先导入了requests库,并定义了要请求的url。然后,我们使用requests.get()方法来发送请求,并将得到的响应对象保存在response变量中。最后,我们使用response.text属性来获取网页内容,并将结果打印输出。
4. 使用BeautifulSoup解析网页
接下来,我们需要使用BeautifulSoup库来解析网页内容。以下是一个简单的示例代码:
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/top250'
# 发送Get请求,获取网页内容
response = requests.get(url)
# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 输出网页标题
print(soup.title)
以上代码中,我们导入了requests和BeautifulSoup库,并定义了要请求的url。然后,我们使用requests.get()方法来发送请求,并将得到的响应对象保存在response变量中。
接着,我们使用BeautifulSoup类来解析网页内容,并将解析结果保存在soup变量中。最后,我们使用soup.title属性来获取网页标题,并将结果打印输出。
5. 代码实现
在此处,我们将介绍如何使用Python编写一个完整的豆瓣电影Top250爬虫程序。以下是实现步骤:
- 导入相关库(包括Requests和BeautifulSoup)
- 定义要爬取的首页URL
- 遍历所有页面,获取每一页的电影信息
- 解析每一页的电影信息,并将结果保存至CSV文件
实现代码如下:
import requests
from bs4 import BeautifulSoup
import csv
# 定义要爬取的首页URL
url = 'https://movie.douban.com/top250'
# 定义保存结果的CSV文件
csv_file = open('movies.csv', 'w', newline='', encoding='utf-8')
writer = csv.writer(csv_file)
# 写入标题行
writer.writerow(['电影名称', '评分', '评价人数', '年份', '导演', '主演', '电影类型'])
# 遍历所有页面,获取每一页的电影信息
for page in range(10):
url = f'https://movie.douban.com/top250?start={page*25}&filter='
response = requests.get(url)
# 解析页面内容
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = soup.find_all('div', class_='hd')
# 解析每一页的电影信息,并将结果保存至CSV文件
for movie in movie_list:
movie_name = movie.a.span.text.strip()
movie_url = movie.a['href']
movie_response = requests.get(movie_url)
movie_soup = BeautifulSoup(movie_response.text, 'html.parser')
rating_num = movie_soup.find('strong', class_='ll rating_num').text
rating_people = movie_soup.find('div', class_='rating_sum').a.span.text
try:
year = movie_soup.find('span', class_='year').text[1:-1]
except:
year = ''
director = movie_soup.find('a', rel='v:directedBy').text.strip()
actor_tag = movie_soup.find_all('a', rel='v:starring')
actors = '/'.join([actor.text.strip() for actor in actor_tag])
genre_tag = movie_soup.find_all('span', property='v:genre')
genres = '/'.join([genre.text.strip() for genre in genre_tag])
writer.writerow([movie_name, rating_num, rating_people, year, director, actors, genres])
# 关闭CSV文件
csv_file.close()
代码实现效果为:爬取豆瓣电影Top250前10页的电影信息,并将结果保存至CSV文件中。CSV文件中包括电影名称、评分、评价人数、年份、导演、主演和电影类型等信息。
6. 结束语
这篇教程简单介绍了如何使用Python爬虫编写一个豆瓣电影Top250爬虫程序,主要使用了Requests和BeautifulSoup两个常用的库。在实际爬虫应用中,还需要注意很多细节问题,比如如何处理异常、如何设置请求头、如何爬取动态生成的页面等等。希望本篇教程对于有志于学习Python爬虫技能的同学有所帮助。
示例1:爬取糗事百科热门段子
import requests
from bs4 import BeautifulSoup
url = 'https://www.qiushibaike.com/text/page/{}/'
for page in range(1, 11):
response = requests.get(url.format(page), 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.36 Edge/16.16299'
})
soup = BeautifulSoup(response.text, 'html.parser')
story_list = soup.find_all('div', class_='content')
for story in story_list:
print(story.text.strip())
以上代码使用了类似的方式,爬取了糗事百科的热门段子信息,并将结果打印输出。
示例2:爬取舆情信息
import requests
import json
url = 'https://api.informal.ai/channel/article/raw_list'
params = {
'page': 1,
'limit': 20,
'channel_id': 1,
'start_time': '2022-01-01',
'end_time': '2022-01-31',
}
headers = {
'Authorization': 'Bearer xxxxxxxx',
'Access-Control-Allow-Origin': '*',
}
response = requests.get(url, params=params, headers=headers)
result = json.loads(response.text)
for article in result['data']:
print(article['title'], article['content'])
以上代码使用requests库向informal.ai的舆情监测API发送了GET请求,获取了2022年1月1日至1月31日之间的舆情文章信息,并将结果打印输出。需要注意的是,在请求头中需要带上授权Token(由informal.ai提供)才能够正常获得数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫入门教程01之爬取豆瓣Top电影 - Python技术站