Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

本文主要是介绍Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

**爬取豆瓣电影信息,分析近年电影行业的发展情况**

本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

 

最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。

目录

 

**爬取豆瓣电影信息,分析近年电影行业的发展情况**

一、爬取豆瓣电影

1.1认识XPath

1.2豆瓣电影信息

(1)主页数据探索

(2)详细页探索

1.3代码区

1.4 完整代码

1.5遇到的问题

1.使用User_Agent,仿造浏览器访问 headers

2.伪造Cookie,解封豆瓣IP

3.使用代理IP proxies

二、数据分析和可视化

2.1数据清洗

2.2数据分析,终于到了

2.3  建立回归模型

2.4 完整代码


一、爬取豆瓣电影

1.1认识XPath

先简单介绍下XPath,爬虫的时候会用到,尤其是爬取页面的内容不同时,需要对此进行修改。

lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息。

xpath的节点关系

每个XML的标签我们都称之为节点,其中最顶层的节点称为根节点。

 

xpath中节点的关系

选取节点
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

使用chrome插件选择标签时候,选中时,选中的标签会添加属性class=”xh-highlight”

下面列出了最有用的表达式:

实例
在下面的表格中,已列出了一些路径表达式以及表达式的结果:

xpath基础语法练习:
选择所有的h1下的文本

//h1/text()

获取所有的a标签的href

//a/@href

获取html下的head下的title的文本

/html/head/title/text()

获取html下的head下的link标签的href

/html/head/link/@href

 

查找特定的节点

1.2豆瓣电影信息

(1)主页数据探索

接下来开始正式爬取豆瓣电影的数据

https://movie.douban.com/tag/#/?sort=U&range=8,10&tags=%E7%94%B5%E5%BD%B1,%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86&page_limit=20&page_start=0

对应关系如下:

1. sort

排序方式,有三种: U:近期热门排序,T:标记最多排序, R:最新上映排序, S:评价最高排序:

2.range=0,10  评分范围

3.tags    影视形式,类型,地区,特色

4.其它,可以不管

playbale=1:表示可播放
unwatched=1:表示还没看过的

 

通过对网址分析https://movie.douban.com/tag/#/?sort=U&range=8,10&tags=%E7%94%B5%E5%BD%B1,%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86&page_limit=20&page_start=0

“加载更多”分析

1) 首先要能看网页发回来的JSON数据,步骤如下:

  • 打开chrome的“检查”工具
  • 切换到network界面
  • 选择XHR
  • 在页面上点击“加载更多”后会看到浏览器发出去的请求
  • Preview界面可以看到接受到的JSON数据

 

这里可以发现,每次点击“加载更多”,每次会增加显示20个电影,真实URL中的start这个参数从0-20-40…变化,发送回来最新加载出来的20个电影的JSON数据,了解了这些以后,下面就可以用代码实现抓取了。

  • page_limit=20 决定请求信息的数量
  • page_start=0 决定请求的位置

(2)详细页探索

可以看到,其实主页上已经包含了影片的名称和评分数据,详细的内容还要点击具体的影片,打开如下:

这些都是我们要获取的信息。

通过以上就可以确定超链接位置所在,具体的方法是点击上图红色方框内的“箭头”,之后选择你想获取的信息即可,然后下面就会显示出来。

具体的内容如下,语法见前面内容:

name=html.xpath('//span[@property="v:itemreviewed"]/text()')               #电影名director=html.xpath('//a[@rel="v:directedBy"]//text()')                              #导演actor1=html.xpath('//span[@class="attrs"]/a[@rel="v:starring"]//text()')   #演员
actor = ["/".join(actor1)]                                                                            #有多个内容,合并在一起award1=html.xpath('//*[@id="content"]/div[3]/div[1]/div[8]//li[1]/a//text()') #获奖情况
award = ["/".join(award1)]                                                                         #有多个内容,合并在一起

 

其他数据参考下面的代码:

name=html.xpath('//span[@property="v:itemreviewed"]/text()')#电影名director=html.xpath('//a[@rel="v:directedBy"]//text()')#导演#playwright=html.xpath('//span[@class="pl",contains(text(),"编剧")]//text()')actor1=html.xpath('//span[@class="attrs"]/a[@rel="v:starring"]//text()')#演员actor = ["/".join(actor1)]movie_class1=html.xpath('//span[@property="v:genre"]//text()')#电影分类movie_class = ["/".join(movie_class1)]contry=re.compile('<span class="pl">制片国家/地区:</span>(.*?)<br/>').findall(response.text)#制片国家\地区releasedate=html.xpath('//span[@property="v:initialReleaseDate"]/@content')#上映日期runtime=html.xpath('//span[@property="v:runtime"]/@content')#片长grade=html.xpath('//strong[@class="ll rating_num"]/text()')#电影评分award1=html.xpath('//*[@id="content"]/div[3]/div[1]/div[8]//li[1]/a//text()')#获奖情况award = ["/".join(award1)]comments_user=html.xpath('//span[@property="v:votes"]/text()')#评论人数            duanpingshu1=html.xpath('//*[@id="comments-section"]/div[1]/h2/span/a/text()')#短评数duanpingshu = re.findall("\d+\.?\d*", str(duanpingshu1))    #转化为数字yinhpingshu1=html.xpath('//*[@id="reviews-wrapper"]/header/h2/span/a/text()')#影评数yinhpingshu = re.findall("\d+\.?\d*", str(yinhpingshu1))    #转化为数字

好,那理一下我们的思路

  • 首先,进入豆瓣电影,一共获取n页,每页20个影片。(n取决于你,想获取多少电影)
  • 然后,针对每一页的20个影片,进入其详细内容页面
  • 最后,解析每个影片的详细内容,保存内容到数据库中

代码思路如下:

# 遍历10页
# 保存所有影片数据集
    # 爬取n页的每一页数据 
    # 遍历每一页的20个影片
        # 爬取每个影片的详细内容
        # 保存每个影片信息到数据集中
# 保存结果到数据库中

稍微解释一下:两层循环,第一层是遍历n页网页,因为其中每个网页分别有20个影片,所以,第二层循环又依次遍历20个影片获取详细信息,最后保存结果到数据库中!
 

1.3代码区

由于豆瓣的电影区采用了Ajax技术来渲染页面信息,为方便爬取页面的电影信息,采用了selenium方法来模拟浏览器访问页面并对Ajax渲染操作,不断获取更新的电影信息。把要用的服务准备好。

import requests
from lxml import etree
import pandas as pd
import numpy as np
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import random
import re

user_agent.txt收集了大量不同的user-agent数据,用来编辑访问请求的请求头信息,模仿后期的浏览器浏览。user_agents1.txt在附件中

with open('user_agents1.txt', 'r') as f:U=[]for line in f:U.append(f.readline())

通过selenium作n次Ajax渲染后,爬取页面源代码中电影的图片、url,并关闭浏览器。先爬取高分电影(8分-10分)。

url='https://movie.douban.com/tag/#/?sort=U&range=8,10&tags=%E7%94%B5%E5%BD%B1,%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86&page_limit=20&page_start=0'
#豆瓣华语电影区,根据热门标签选电影的url
broser=webdriver.C

这篇关于Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150133

相关文章

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os