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 修改文件指定行的方法
May 15 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python字符串和常用数据结构知识总结
May 21 Python
Python 列表去重去除空字符的例子
Jul 20 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python autoescape标签用法解析
Jan 17 Python
python实现字符串和数字拼接
Mar 02 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 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
通过文字传递创建的图形按钮
2006/10/09 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php中JSON的使用方法
2015/04/30 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
php扩展开发入门demo示例
2019/09/23 PHP
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
Python 变量类型详解
2018/10/10 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
python基础教程之while循环
2019/08/14 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
python ssh 执行shell命令的示例
2020/09/29 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
最新大学职业规划书范文
2013/12/30 职场文书
老龄工作先进事迹
2014/08/15 职场文书
六查六看心得体会
2014/10/14 职场文书
先进党员事迹材料
2014/12/24 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书