做外汇需要了解的网站,官方关停13家网站,盘锦做网站企业,工信部查询网站备案博客主页#xff1a;小馒头学python
本文专栏: Python爬虫五十个小案例
专栏简介#xff1a;分享五十个Python爬虫小案例 #x1fab2;前言 在这篇博客中#xff0c;我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求#xff0c;…
博客主页小馒头学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, headersheaders)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).textrating movie.find(span, class_rating_num).textdirector, 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?startX其中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 csvdef save_to_csv():keys movie_list[0].keys()with open(douban_top250.csv, w, newline, encodingutf-8) as output_file:dict_writer csv.DictWriter(output_file, fieldnameskeys)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) # 将电影列表转换为DataFramedf.to_excel(douban_top250.xlsx, indexFalse, engineopenpyxl) # 保存为Excel文件完整的代码
import csvimport 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, headersheaders)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).textrating movie.find(span, class_rating_num).textdirector_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页的豆瓣Top250for 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, encodingutf-8-sig) as output_file:dict_writer csv.DictWriter(output_file, fieldnameskeys)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?fromshareblogcolumnsharetypeblogcolumnsharerId12840403sharereferPCsharesourcenull18sharefromfrom_link