马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
博客主页:小馒头学python
本文专栏: Python爬虫五十个小案例
专栏简介:分享五十个Python爬虫小案例
🪲前言
在这篇博客中,我们将学习怎样使用Python爬取豆瓣影戏Top250的数据。我们将使用requests库来发送HTTP哀求,BeautifulSoup库来剖析HTML页面,并将数据存储到CSV文件中。这个爬虫将自动获取豆瓣影戏Top250页面的信息,包罗影戏名称、导演、主演、评分等详细信息
豆瓣影戏Top250是一个包罗豆瓣评分最高的250部影戏的榜单,是影戏爱好者查找影戏的一大宝库。本博客将引导各人怎样通过编写Python爬虫自动获取豆瓣影戏Top250的数据
🪲情况预备
起首,我们须要安装一些Python库来完资本次使命。以下是我们将使用的库:
- requests:用来发送HTTP哀求并获取网页内容。
- BeautifulSoup:用来剖析HTML页面,提取我们须要的数据。
- csv:将爬取的数据生存到CSV文件中。
由于我们使用的是Python举行爬虫,以是我们使用的下令行是
pip install requests beautifulsoup4 csv
🪲爬虫原理与分析
豆瓣影戏Top250的URL是 https://movie.douban.com/top250。页面内容是分页体现的,每一页展示25部影戏,最多5页。我们须要访问这些页面并提取影戏数据
数据结构分析
每一部影戏的信息在HTML结构中都有相应的标签,我们须要从中提取出以下信息:
- 影戏名称
- 影戏评分
- 影戏导演
- 影戏主演
- 影戏年份
- 影戏范例
通过使用BeautifulSoup剖析HTML,我们可以轻松提取这些信息
🪲代码详细的实现
发送哀求获取网页内容
我们起首使用requests库发送哀求来获取网页内容。豆瓣会返回HTML页面,我们将把这些内容通报给BeautifulSoup举行剖析
- import requests
- from bs4 import BeautifulSoup
- # 设置请求头,避免被豆瓣屏蔽
- 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'
- }
- # 获取豆瓣电影Top250的前五页数据
- base_url = "https://movie.douban.com/top250"
- movie_list = []
- def get_page(url):
- response = requests.get(url, headers=headers)
- return response.text
复制代码 剖析网页内容
使用BeautifulSoup剖析HTML页面,找到每部影戏的信息。每部影戏的信息包罗在div标签中,类名为item
- def parse_page(html):
- soup = BeautifulSoup(html, 'html.parser')
- movies = soup.find_all('div', class_='item')
- for movie in movies:
- title = movie.find('span', class_='title').text
- rating = movie.find('span', class_='rating_num').text
- director, actors = movie.find('div', class_='bd').find('p').text.strip().split("\n")[:2]
- year = movie.find('div', class_='bd').find('p').text.strip().split("\n")[0]
- movie_type = movie.find('span', class_='genre').text.strip()
-
- movie_info = {
- 'title': title,
- 'rating': rating,
- 'director': director,
- 'actors': actors,
- 'year': year,
- 'type': movie_type
- }
-
- movie_list.append(movie_info)
复制代码 提取影戏数据
我们如今可以循环访问每一页的URL并提取数据。豆瓣影戏Top250有5页,URL结构为https://movie.douban.com/top250?start=X,此中X为每页的起始索引(0, 25, 50, …)
接下来我们的其他案例也会采取雷同的分析方式,同砚们可以
- def main():
- for start in range(0, 250, 25):
- url = f"{base_url}?start={start}"
- html = get_page(url)
- parse_page(html)
- # 输出结果
- for movie in movie_list:
- print(movie)
- if __name__ == "__main__":
- main()
复制代码 生存数据到CSV文件大概Excel文件
为了方便后续的数据分析,我们可以将数据生存到CSV文件中
- import csv
- def save_to_csv():
- keys = movie_list[0].keys()
- with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as output_file:
- dict_writer = csv.DictWriter(output_file, fieldnames=keys)
- dict_writer.writeheader()
- dict_writer.writerows(movie_list)
- save_to_csv()
复制代码 如果是Excel那么可以参考下面的案例代码
- import pandas as pd # 导入pandas库
- def save_to_excel():
- df = pd.DataFrame(movie_list) # 将电影列表转换为DataFrame
- df.to_excel('douban_top250.xlsx', index=False, engine='openpyxl') # 保存为Excel文件
复制代码 🪲完备的代码
- import csv
- import requests
- from bs4 import BeautifulSoup
- import pandas as pd # 导入pandas库
- # 设置请求头,避免被豆瓣屏蔽
- 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'
- }
- # 获取豆瓣电影Top250的前五页数据
- base_url = "https://movie.douban.com/top250"
- movie_list = []
- # 发送请求获取网页内容
- def get_page(url):
- response = requests.get(url, headers=headers)
- return response.text
- # 解析网页内容并提取电影信息
- def parse_page(html):
- soup = BeautifulSoup(html, 'html.parser')
- movies = soup.find_all('div', class_='item')
- for movie in movies:
- title = movie.find('span', class_='title').text
- rating = movie.find('span', class_='rating_num').text
- director_actors = movie.find('div', class_='bd').find('p').text.strip().split("\n")[:2]
- director = director_actors[0]
- actors = director_actors[1] if len(director_actors) > 1 else ''
- # 处理电影类型,避免找不到的情况
- genre_tag = movie.find('span', class_='genre')
- movie_type = genre_tag.text.strip() if genre_tag else '未知'
- # 处理电影年份
- year_tag = movie.find('div', class_='bd').find('p').text.strip().split("\n")[0]
- # 构建电影信息字典
- movie_info = {
- 'title': title,
- 'rating': rating,
- 'director': director,
- 'actors': actors,
- 'year': year_tag,
- 'type': movie_type
- }
- # 将电影信息添加到列表中
- movie_list.append(movie_info)
- # 爬取豆瓣电影Top250的所有页面
- def main():
- # 遍历前5页的豆瓣Top250
- for start in range(0, 250, 25):
- url = f"{base_url}?start={start}"
- html = get_page(url)
- parse_page(html)
- # 输出结果
- for movie in movie_list:
- print(movie)
- def save_to_csv():
- keys = movie_list[0].keys() # 获取电影数据字典的键(即列名)
- # 写入CSV文件
- with open('douban_top250.csv', 'w', newline='', encoding='utf-8-sig') as output_file:
- dict_writer = csv.DictWriter(output_file, fieldnames=keys)
- dict_writer.writeheader() # 写入列名
- dict_writer.writerows(movie_list) # 写入电影数据
- # 主函数
- if __name__ == "__main__":
- main()
- save_to_csv()
- print("爬取完成,数据已保存到 douban_top250.csv")
复制代码 🪲运行效果
运行上述代码后,你将会得到一个名为douban_top250.csv的文件,文件内容如下所示:
下图是生存为csv文件的格式,这里留意encoding=‘utf-8-sig’,encoding如果便是utf-8,那么直接双击csv文件会乱码的
🪲总结
本文告急先容了如果使用简朴的爬虫举行数据的爬取,这里告急举行豆瓣影戏Top250的数据爬取,我们使用的库就是requests、bs4、pandas、csv等库,本节告急重在案例的实践,还想相识更多的爬虫案例可以关注我的专栏
Python爬虫五十个小案例:https://blog.csdn.net/null18/category_12840403.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12840403&sharerefer=PC&sharesource=null18&sharefrom=from_link
|