基于python的scrapy框架爬取豆瓣电影及其可视化
1.Scrapy框架介绍
主要介绍,spiders,engine,scheduler,downloader,Item pipeline
scrapy常见命令如下:

对应在scrapy文件中有,自己增加爬虫文件,系统生成items,pipelines,setting的配置文件就这些。
items写需要爬取的属性名,pipelines写一些数据流操作,写入文件,还是导入数据库中。主要爬虫文件写domain,属性名的xpath,在每页添加属性对应的信息等。
movieRank = scrapy.Field()
movieName = scrapy.Field()
Director = scrapy.Field()
movieDesc = scrapy.Field()
movieRate = scrapy.Field()
peopleCount = scrapy.Field()
movieDate = scrapy.Field()
movieCountry = scrapy.Field()
movieCategory = scrapy.Field()
moviePost = scrapy.Field()
import json class DoubanPipeline(object):
def __init__(self):
self.f = open("douban.json","w",encoding='utf-8') def process_item(self, item, spider):
content = json.dumps(dict(item),ensure_ascii = False)+"\n"
self.f.write(content)
return item def close_spider(self,spider):
self.f.close()
这里xpath使用过程中,安利一个chrome插件xpathHelper。
allowed_domains = ['douban.com']
baseURL = "https://movie.douban.com/top250?start="
offset = 0
start_urls = [baseURL + str(offset)] def parse(self, response):
node_list = response.xpath("//div[@class='item']") for node in node_list:
item = DoubanItem()
item['movieName'] = node.xpath("./div[@class='info']/div[1]/a/span/text()").extract()[0]
item['movieRank'] = node.xpath("./div[@class='pic']/em/text()").extract()[0]
item['Director'] = node.xpath("./div[@class='info']/div[@class='bd']/p[1]/text()[1]").extract()[0]
if len(node.xpath("./div[@class='info']/div[@class='bd']/p[@class='quote']/span[@class='inq']/text()")):
item['movieDesc'] = node.xpath("./div[@class='info']/div[@class='bd']/p[@class='quote']/span[@class='inq']/text()").extract()[0]
else:
item['movieDesc'] = "" item['movieRate'] = node.xpath("./div[@class='info']/div[@class='bd']/div[@class='star']/span[@class='rating_num']/text()").extract()[0]
item['peopleCount'] = node.xpath("./div[@class='info']/div[@class='bd']/div[@class='star']/span[4]/text()").extract()[0]
item['movieDate'] = node.xpath("./div[2]/div[2]/p[1]/text()[2]").extract()[0].lstrip().split('\xa0/\xa0')[0]
item['movieCountry'] = node.xpath("./div[2]/div[2]/p[1]/text()[2]").extract()[0].lstrip().split('\xa0/\xa0')[1]
item['movieCategory'] = node.xpath("./div[2]/div[2]/p[1]/text()[2]").extract()[0].lstrip().split('\xa0/\xa0')[2]
item['moviePost'] = node.xpath("./div[@class='pic']/a/img/@src").extract()[0]
yield item if self.offset <250:
self.offset += 25
url = self.baseURL+str(self.offset)
yield scrapy.Request(url,callback = self.parse)
这里基本可以爬虫,产生需要的json文件。
接下来是可视化过程。
我们先梳理一下,我们掌握的数据情况。
douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
douban.info()

基本我们可以分析,电影国家产地,电影拍摄年份,电影类别以及一些导演在TOP250中影响力。
先做个简单了解,可以使用value_counts()函数。
douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
df_Country = douban['movieCountry'].copy()
for i in range(len(df_Country)):
item = df_Country.iloc[i].strip()
df_Country.iloc[i] = item[0]
print(df_Country.value_counts())

美国电影占半壁江山,122/250,可以反映好莱坞电影工业之强大。同样,日本电影和香港电影在中国也有着重要地位。令人意外是,中国大陆地区电影数量不是令人满意。豆瓣影迷对于国内电影还是非常挑剔的。
douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
df_Date = douban['movieDate'].copy()
for i in range(len(df_Date)):
item = df_Date.iloc[i].strip()
df_Date.iloc[i] = item[2]
print(df_Date.value_counts())

2000年以来电影数目在70%以上,考虑10代才过去9年和打分滞后性,总体来说越新的电影越能得到受众喜爱。这可能和豆瓣top250选取机制有关,必须人数在一定数量以上。
douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
df_Cate = douban['movieCategory'].copy()
for i in range(len(df_Cate)):
item = df_Cate.iloc[i].strip()
df_Cate.iloc[i] = item[0]
print(df_Cate.value_counts())

剧情电影情节起伏更容易得到观众认可。
下面展示几张可视化图片



不太会用python进行展示,有些难看。其实,推荐用Echarts等插件,或者用Excel,BI软件来处理图片,比较方便和美观。
第一次做这种爬虫和可视化,多有不足之处,恳请指出。
基于python的scrapy框架爬取豆瓣电影及其可视化的更多相关文章
- Python爬虫入门:爬取豆瓣电影TOP250
一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- scrapy框架爬取豆瓣读书(1)
1.scrapy框架 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...
- Python的scrapy之爬取豆瓣影评和排名
基于scrapy框架的爬影评 爬虫主程序: import scrapy from ..items import DoubanmovieItem class MoviespiderSpider(scra ...
- python爬虫scrapy框架——爬取伯乐在线网站文章
一.前言 1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...
- python利用scrapy框架爬取起点
先上自己做完之后回顾细节和思路的东西,之后代码一起上. 1.Mongodb 建立一个叫QiDian的库,然后建立了一个叫Novelclass(小说类别表)Novelclass(可以把一级类别二级类别都 ...
- python scrapy框架爬取豆瓣
刚刚学了一下,还不是很明白.随手记录. 在piplines.py文件中 将爬到的数据 放到json中 class DoubanmoviePipelin2json(object):#打开文件 open_ ...
- 初识python 之 爬虫:爬取豆瓣电影最热评论
主要用到lxml的etree解析网页代码,xpath获取HTML标签. 代码如下: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:20 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
随机推荐
- JSF标签之f:facet 的用法
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zkn_CS_DN_2013/article/details/33717091 f:facet标签用来 ...
- linux 用户和组及文件权限的相关内容
1.添加用户(只有管理员用户或具有管理员权限的用户可以添加删除用户) useradd 用户名 (laoda) 新创建用户后home下会多一个laoda的目录 ,此目录中存放的是laoda用户相关的 ...
- Python学习之路 (三)爬虫(二)
通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...
- mongodb的学习-2-简介
http://www.runoob.com/mongodb/mongodb-intro.html 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系 ...
- Google 历年笔试面试30题
1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1).设计一个函数void g ...
- 浅谈基于FormsAuthentication的认证
一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...
- [原创]升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID
公司使用git+gerrit+jenkins进行持续集成实践,其中gerrit用来进行Code Review.另外我们自己研发了一套敏捷项目管理系统TPM(TeamPlus Management),用 ...
- JS实现图片的淡入和淡出的两种方法,如有不足,还请前辈多多指导^-^~
今天下午练习了下这个图片的淡入淡出小demo,如有不足,还请前辈多多指导^-^~ 总结如下: 第一种方法: 个人觉得第一种方法比较好,同时兼容IE8以下浏览器,但是如下代码中,不知可不可以将timer ...
- MySQL基础----py全栈
目录 MySQL基础----py全栈 一.引言 1.什么是数据? 2.什么是数据库(DB)? 3.什么是数据库管理系统(DBMS)? 4.什么是数据库系统? 5.数据库管理系统由来 6.什么是数据模型 ...
- MySQL配置主主及主从备份
原文:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0. ...