Python爬虫入门教程01之爬取豆瓣Top电影


Posted in Python onJanuary 24, 2021

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

基本开发环境

  •  Python 3.6
  • Pycharm

相关模块的使用

  •  requests
  • parsel
  • csv

安装Python并添加到环境变量,pip安装需要的相关模块即可。

爬虫基本思路

Python爬虫入门教程01之爬取豆瓣Top电影

一、明确需求

爬取豆瓣Top250排行电影信息

  • 电影名字
  • 导演、主演
  • 年份、国家、类型
  • 评分、评价人数
  • 电影简介

Python爬虫入门教程01之爬取豆瓣Top电影 

二、发送请求

Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模块就是requests。

Python爬虫入门教程01之爬取豆瓣Top电影
Python爬虫入门教程01之爬取豆瓣Top电影

请求url地址,使用get请求,添加headers请求头,模拟浏览器请求,网页会给你返回response对象

# 模拟浏览器发送请求
import requests
url = 'https://movie.douban.com/top250'
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response)

Python爬虫入门教程01之爬取豆瓣Top电影

200是状态码,表示请求成功

2xx (成功)
3xx (重定向)
4xx(请求错误)
5xx(服务器错误)

常见状态码

  • 200 - 服务器成功返回网页,客户端请求已成功。
  • 302 - 对象临时移动。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 304 - 属于重定向。自上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
  • 401 - 未授权。请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
  • 404 - 未找到。服务器找不到请求的网页。
  • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。

通常,这只是暂时状态。

 三、获取数据

import requests
url = 'https://movie.douban.com/top250'
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response.text)

Python爬虫入门教程01之爬取豆瓣Top电影

requests.get(url=url, headers=headers) 请求网页返回的是response对象

response.text: 获取网页文本数据

response.json: 获取网页json数据

这两个是用的最多的,当然还有其他的

apparent_encoding cookies  	history
iter_lines  ok						close   
elapsed  is_permanent_redirect 	json   
raise_for_status	 connection  	encoding  
is_redirect  links   	raw   
content  headers  	iter_content  
next   reason					url

四、解析数据

常用解析数据方法: 正则表达式、css选择器、xpath、lxml…

常用解析模块:bs4、parsel…

我们使用的是 parsel 无论是在之前的文章,还是说之后的爬虫系列文章,我都会使用 parsel 这个解析库,无它就是觉得它比bs4香。

parsel 是第三方模块,pip install parsel 安装即可

parsel 可以使用 css、xpath、re解析方法

Python爬虫入门教程01之爬取豆瓣Top电影

所有的电影信息都包含在 li 标签当中。

# 把 response.text 文本数据转换成 selector 对象
selector = parsel.Selector(response.text)
# 获取所有li标签
lis = selector.css('.grid_view li')
# 遍历出每个li标签内容
for li in lis:
 # 获取电影标题 hd 类属性 下面的 a 标签下面的 第一个span标签里面的文本数据 get()输出形式是 字符串获取一个 getall() 输出形式是列表获取所有
 title = li.css('.hd a span:nth-child(1)::text').get() # get()输出形式是 字符串
 movie_list = li.css('.bd p:nth-child(1)::text').getall() # getall() 输出形式是列表
 star = movie_list[0].strip().replace('\xa0\xa0\xa0', '').replace('/...', '')
 movie_info = movie_list[1].strip().split('\xa0/\xa0') # ['1994', '美国', '犯罪 剧情']
 movie_time = movie_info[0] # 电影上映时间
 movie_country = movie_info[1] # 哪个国家的电影
 movie_type = movie_info[2] # 什么类型的电影
 rating_num = li.css('.rating_num::text').get() # 电影评分
 people = li.css('.star span:nth-child(4)::text').get() # 评价人数
 summary = li.css('.inq::text').get() # 一句话概述
 dit = {
 '电影名字': title,
 '参演人员': star,
 '上映时间': movie_time,
 '拍摄国家': movie_country,
 '电影类型': movie_type,
 '电影评分': rating_num,
 '评价人数': people,
 '电影概述': summary,
 }
 # pprint 格式化输出模块
 pprint.pprint(dit)

Python爬虫入门教程01之爬取豆瓣Top电影

以上的知识点使用到了

  • parsel 解析模块的方法
  • for 循环
  • css 选择器
  • 字典的创建
  • 列表取值
  • 字符串的方法:分割、替换等
  • pprint 格式化输出模块

所以扎实基础是很有必要的。不然你连代码都不知道为什么要这样写。

五、保存数据(数据持久化)

常用的保存数据方法 with open

像豆瓣电影信息这样的数据,保存到Excel表格里面会更好。

所以需要使用到 csv 模块

# csv模块保存数据到Excel
f = open('豆瓣电影数据.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['电影名字', '参演人员', '上映时间', '拍摄国家', '电影类型',
      '电影评分', '评价人数', '电影概述'])

csv_writer.writeheader() # 写入表头

Python爬虫入门教程01之爬取豆瓣Top电影
Python爬虫入门教程01之爬取豆瓣Top电影

这就是爬取了数据保存到本地了。这只是一页的数据,爬取数据肯定不只是爬取一页数据。想要实现多页数据爬取,就要分析网页数据的url地址变化规律。

Python爬虫入门教程01之爬取豆瓣Top电影

可以清楚看到每页url地址是 25 递增的,使用for循环实现翻页操作

for page in range(0, 251, 25):
 url = f'https://movie.douban.com/top250?start={page}&filter='

完整实现代码

""""""
import pprint
import requests
import parsel
import csv
'''
1、明确需求:
 爬取豆瓣Top250排行电影信息
 电影名字
 导演、主演
 年份、国家、类型
 评分、评价人数
 电影简介
'''
# csv模块保存数据到Excel
f = open('豆瓣电影数据.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['电影名字', '参演人员', '上映时间', '拍摄国家', '电影类型',
      '电影评分', '评价人数', '电影概述'])

csv_writer.writeheader() # 写入表头

# 模拟浏览器发送请求
for page in range(0, 251, 25):
 url = f'https://movie.douban.com/top250?start={page}&filter='
 headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
 }
 response = requests.get(url=url, headers=headers)
 # 把 response.text 文本数据转换成 selector 对象
 selector = parsel.Selector(response.text)
 # 获取所有li标签
 lis = selector.css('.grid_view li')
 # 遍历出每个li标签内容
 for li in lis:
 # 获取电影标题 hd 类属性 下面的 a 标签下面的 第一个span标签里面的文本数据 get()输出形式是 字符串获取一个 getall() 输出形式是列表获取所有
 title = li.css('.hd a span:nth-child(1)::text').get() # get()输出形式是 字符串
 movie_list = li.css('.bd p:nth-child(1)::text').getall() # getall() 输出形式是列表
 star = movie_list[0].strip().replace('\xa0\xa0\xa0', '').replace('/...', '')
 movie_info = movie_list[1].strip().split('\xa0/\xa0') # ['1994', '美国', '犯罪 剧情']
 movie_time = movie_info[0] # 电影上映时间
 movie_country = movie_info[1] # 哪个国家的电影
 movie_type = movie_info[2] # 什么类型的电影
 rating_num = li.css('.rating_num::text').get() # 电影评分
 people = li.css('.star span:nth-child(4)::text').get() # 评价人数
 summary = li.css('.inq::text').get() # 一句话概述
 dit = {
  '电影名字': title,
  '参演人员': star,
  '上映时间': movie_time,
  '拍摄国家': movie_country,
  '电影类型': movie_type,
  '电影评分': rating_num,
  '评价人数': people,
  '电影概述': summary,
 }
 pprint.pprint(dit)
 csv_writer.writerow(dit)

实现效果

Python爬虫入门教程01之爬取豆瓣Top电影
Python爬虫入门教程01之爬取豆瓣Top电影

到此这篇关于Python爬虫入门教程01之爬取豆瓣Top电影的文章就介绍到这了,更多相关Python爬取豆瓣Top电影内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python计算最小优先级队列代码分享
Dec 18 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
python构建自定义回调函数详解
Jun 20 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
Python3.5文件修改操作实例分析
May 01 Python
PyQt5 多窗口连接实例
Jun 19 Python
python psutil模块使用方法解析
Aug 01 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
python使用rsa非对称加密过程解析
Dec 28 Python
pytorch 修改预训练model实例
Jan 18 Python
python实现的人脸识别打卡系统
May 08 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 Python
详解python的变量缓存机制
Jan 24 #Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 #Python
利用Python函数实现一个万历表完整示例
Jan 23 #Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 #Python
如何使用Python进行PDF图片识别OCR
Jan 22 #Python
详解pandas映射与数据转换
Jan 22 #Python
python实现简单的井字棋游戏(gui界面)
Jan 22 #Python
You might like
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
Vue中props的使用详解
2018/06/15 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python3 replace()函数使用方法
2018/03/19 Python
python调试神器PySnooper的使用
2019/07/03 Python
python 实现屏幕录制示例
2019/12/23 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
对python中return与yield的区别详解
2020/03/12 Python
警察先进个人事迹材料
2014/05/16 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫