一、背景

前些日子突发奇想,想看看日本小电影(当然就是那种电影啦)女演员之间是什么关系,于是就有了这个系列的文章。今天首先介绍一下总体的思路以及利用爬虫获取数据部分。

二、思路

主要思路如下:
1.利用爬虫在视频网站上获取每一部电影的演员表,若两人同时出现在同一部电影中,则认为是一次合作。
2.将上一步获取的数据进行整理成形如“演员A—演员B”的形式。
3.以演员为节点,合作关系为边,利用社交网络(social network)分析方法进行可视化与分析。

三、爬虫编写

这个爬虫是用Python 2.7版本编写的,在整个过程中遇到了不少的编码问题,以后还是用Python 3吧,号称这种问题能少一些。

1.流程
我们要爬取的网站结构是这样的,首先是主页:
https://xxxx.xx/cn/released/page/1
这里可以用最后的数字对整个网站的页面进行遍历。然而,电影页只有电影的名称和封面,要想获取演员信息,还要进到电影详细信息页:
https://xxxx.xx/cn/movie/5myc
以上电影详细信息页的超链接可以由主页获得。

因此,爬虫的流程就是:
主页获取电影详细信息页的超链接
进入电影详细信息页获取演员信息

2.正则表达式设计
利用浏览器查看源码,网站主页的代码如下所示:

<a class="movie-box" href="https://xxxx.xxcn/movie/5my8"><div class="photo-frame"><img src="https://jp.netcdn.space/digital/video/13bsy00009/13bsy00009ps.jpg" title="电影名字少儿不宜"></div><div class="photo-info"><span>电影名字少儿不宜 <br><date>BSY-009</date> / <date>2016-08-17</date></span></div></a></div>

因此,我们的正则表达式为:

<a class="movie-box" href="(.*?)">.*?<div class="photo-frame">.*?<img src=".*?" title=".*?">.*?</div>.*?<div class="photo-info">.*?<span>(.*?)<br><date>(.*?)</date> / <date>.*?</date></span>

电影详细信息页的代码如下所示:

 <a class="avatar-box" href="https://xxxx.xx/cn/star/2cj"><div class="photo-frame"><img src="https://jp.netcdn.space/mono/actjpgs/haduki_nozomi.jpg" title=""></div><span>啊啊啊</span></a><a class="avatar-box" href="https://avmo.pw/cn/star/8oa"><div class="photo-frame"><img src="https://jp.netcdn.space/mono/actjpgs/kanou_ayako.jpg" title=""></div><span>哈哈哈</span></a><a class="avatar-box" href="https://avmo.pw/cn/star/pvp"><div class="photo-frame"><img src="https://jp.netcdn.space/mono/actjpgs/azuki3.jpg" title=""></div><span>哦哦哦</span></a></div>

因此,我们的正则表达式为:

<a class="avatar-box" href=".*?">.*?<div class="photo-frame">.*?<img src="(.*?)" title="">.*?</div>.*?<span>(.*?)</span>.*?</a>

这样我们就可以抓取想要的内容了。其实要编写爬虫,正则表达式只要学会以下两个就好:

.*?
(.*?)

前者以非贪婪模式匹配任何字符,后者以非贪婪模式匹配字符后存入item中。
对于正则表达式不明白的童鞋可以移步以下链接:

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

3.爬虫程序
下面就是爬虫程序主体了,废话不说上代码

# -*- coding:utf-8 -*-import re
import urllib
import urllib2
import datetimeclass Spider_xxxx:def __init__(self):self.myUrl = 'https://xxxx.xx/cn/released/page/'self.txtadd = 'C:\\thefile.txt'#获取演员信息def GetInnerPages(self,innerurl):try:request = urllib2.Request(innerurl)response = urllib2.urlopen(request)content = response.read().decode('utf-8')content = content.encode('gbk','ignore')subpattern = re.compile('<a class="avatar-box" href=".*?">.*?<div class="photo-frame">.*?<img src="(.*?)" title="">.*?</div>.*?<span>(.*?)</span>.*?</a>',re.S)subitems = re.findall(subpattern, content)for subitem in subitems:print subitem[1]file_object.write(subitem[1])file_object.write(",")file_object.write("\n")except urllib2.URLError, e:if hasattr(e,"code"):print e.codeif hasattr(e,"reason"):print e.reasonfile_object.write("\n")print"---------"#获取电影详细页的超链接def GetOutterPages(self,start,end):start = int(start)end = int(end)for page in range(start,end):page = str(page)url = self.myUrl+pageprint "*****************************************"print urlprint runtimeprint "*****************************************"try:request = urllib2.Request(url)response = urllib2.urlopen(request)content = response.read().decode('utf-8')pattern = re.compile('<a class="movie-box" href="(.*?)">.*?<div class="photo-frame">.*?<img src=".*?" title=".*?">.*?</div>.*?<div class="photo-info">.*?<span>(.*?)<br><date>(.*?)</date> / <date>.*?</date></span>',re.S)items = re.findall(pattern, content)for item in items:suburl = str(item[0])self.GetInnerPages(suburl)except urllib2.URLError, e:if hasattr(e,"code"):print e.codeif hasattr(e,"reason"):print e.reasonprint u"""
---------------------------------------  name    :   xxxxspider  edition  :   0.2  author  :   ultrakin  time    :   2016-08-17
---------------------------------------
"""
starttime = datetime.datetime.now()
runtime = datetime.datetime.now()file_object = open('C:\\thefile.txt','a+') myspider = Spider_xxxx()myspider.GetOutterPages(585,801) #起始页与结束页file_object.close()endtime = datetime.datetime.now()
print 'time:'
print (endtime - starttime).seconds

该爬虫定义的类里面共有两个函数,其中GetOutterPages函数用来在主页获取电影详细信息的超链接,然后由GetInnerPages函数获取演员信息,并将其保存于txt文档。

4.运行情况

这是爬虫运行截图,可见获取了演员信息。

电影演员合作关系可视化(一)整体思路与爬虫编写相关推荐

  1. scrapy爬取豆瓣电影中演员合作关系制作gephi图

    以战狼2距离,从豆瓣电影中的战狼2的HTML页面可以看到,主演信息如下: <a href="/celebrity/1000525/" rel="v:starring ...

  2. 漫威电影人物关系可视化

    3D Force-Directed Graph 这是一个使用ThreeJS/WebGL的三维力定向图形组件. github地址:vasturiano/3d-force-graph: 3D force- ...

  3. 改进客户合作关系,建立共赢的客户合作体系——来自项目管理群的讨论

    pharos[谷雨霖]-cto-北京 [招聘java工程师] 说:  是中国系统与软件过程改进协会第八届年会的一个主题  用友的一个老总做的分享  为什么要改进客户合作关系?  很明确,建立共赢的客户 ...

  4. 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记

    对Verilog 初学者比较有用的整理(转自它处) 作者: Ian11122840 时间: 2010-9-27 09:04 标题: 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记 所谓综 ...

  5. Citesapace作图结果部分——文章整体思路简单分析

    Citespace相关论文,除了引言部分,一般从第二部分开始结合citespace作图软件进行分析,以下做一个该部分简要的概括: 2.Materials and Methods(数据检索部分一般分为两 ...

  6. 合并报表编制采用的理论_合并报表操作的整体思路梳理

    众所周转,财务报表合并是财务核算里的重点也是难点.注册会计师-会计教材中合并报表章节,介绍的<合并财务报表>部分,也是对现行企业会计准则及其应用指南的总结性陈述.整体思路一共分为五个部分: ...

  7. java 搭建个人博客_Spring boot 搭建个人博客系统(一)——整体思路

    Spring boot 搭建个人博客系统(一)--整体思路 一直想用Spring boot 搭建一个属于自己的博客系统,刚好前段时间学习了叶神的牛客项目课受益匪浅,乘热打铁也主要是学习,好让自己熟悉这 ...

  8. 多智能体强化学习:合作关系设定下的多智能体强化学习

    0 前言         在多智能体系统中,一个智能体未必能观测到全局状态 S.设第 i 号智能体有一个局部观测,它是S的一部分.                  我们假设所有的局部观测的总和构成了 ...

  9. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part6基于图谱的问答实现

    前序文章: [知识图谱]实践篇--基于知识图谱的<红楼梦>人物关系可视化及问答系统实践:part1项目介绍与环境准备 [知识图谱]实践篇--基于知识图谱的<红楼梦>人物关系可视 ...

最新文章

  1. 手把手教你如何用黑白显示器显示彩色!
  2. Shi-Tomasi算子的运用 ,用于检测角点
  3. 四十一、Android Notification通知详解
  4. Uipath 学习栏目基础教学:2Uipath变量介绍
  5. Blocking/Non-Blocking VS Sync/Async VS Overlapped
  6. 转:认识cpu、核与线程
  7. maven Web项目添加数据源支持,包括Oracle、Mysql
  8. sap netweaver 7.02_sap顾问工作内容,岗位职责
  9. 你可能需要为你的 APP 适配 iOS 11
  10. 一枚比特币变换一台车,特斯拉与比特币还要绑定多久?
  11. 全网首发:神奇的WORD文字渲染效果,18个字符一组,每个字符渲染效果不同
  12. 【图像增强】基于matlab区域相似变换函数和蜻蜓算法灰度图像增强【含Matlab源码 089期】
  13. 【MATLAB】MATLAB应用手册(1):高等数学的MATLAB应用
  14. 网上购物系统c语言代码,网上购物系统源代码要怎么搭建才是最好的?
  15. h5支付不能打开支付宝 ios_iOS支付宝H5支付无法返回APP解决方案
  16. PyCharm小技巧分享—主菜单消失再显示
  17. SDN先行开拓者们获得可视性和带宽控制
  18. PTA翁恺7-6 厘米换算英尺英寸 (15 分)
  19. React.js基础知识总结一
  20. bytebuddy实现原理分析 源码分析 (三)- advice 详解

热门文章

  1. 淘宝找不到撤销退款申请_干货:找不到淘宝客推广?不如自己做淘客!
  2. 业务单表 读写缓慢 如何优化?
  3. Linux(RedHat9.0)下Alsa声卡驱动的安装
  4. Windows任务计划程序Task Scheduler笔记
  5. 定积分——补充初等数学知识(奇偶性与周期性性)
  6. log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
  7. 华为无线WLAN技术(直连式组网实验)
  8. Android 启用/禁用WLAN直连功能
  9. Canal 组件简介与 vivo 帐号实践
  10. vivo android框架服务,vivo服务安全插件最新版本下载