2-2 抓取银河演员网上的演员参演电影的信息进行抓取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-2 抓取银河演员网上的演员参演电影的信息进行抓取相关的知识,希望对你有一定的参考价值。

脚本中用到的actors_use.csv为之前从豆瓣上抓取的演员列表。

 1 galaxyactors.py
 2 # -*- coding: utf-8 -*-
 3 #该脚本可以按照文件actors_use.csv中给出的演员的姓名
 4 #对银河演员网http://www.8fkd.com/上的演员参演电影的信息进行抓取
 5 #信息包括演员参演电影和电影日期,参演电影数量,和演员出道年份
 6 import requests
 7 import time
 8 import lxml.html
 9 import re
10 from pandas import DataFrame
11 import pandas as pd
12 import random
13 
14 headers = {"User-Agent": Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36}
15 def getDoc(url):
16     resp=requests.get(url,headers=headers)  #得到网页响应
17     time.sleep(0.1)   #暂停0.1秒,防止抓取太频繁被封IP
18     content=resp.text  #获取相应内容
19     doc = lxml.html.fromstring(content)  #得到xml格式的文本
20     return doc
21 
22 def getInfo(url):
23     doc=getDoc(url)  #得到xml格式的文本
24     #得到演员演过的电影列表
25     temp1=doc.xpath(//*[@id="divLeft"]/div/div[2]/div/ul/li[1]/a/text())
26     #得到演员演过的电影的日期的列表
27     temp2=doc.xpath(//*[@id="divLeft"]/div/div[2]/div/ul/li[2]/text())
28     #如果抓取到的电影列表不为空
29     if temp1!=[]:
30         actor_m = []  #初始化该演员演过的电影列表
31         actor_d = []  #初始化该演员演过的电影的日期的列表
32         actor_y = []  #初始化该演员演过的电影的年份的列表
33         temp2=temp2[1:]  #由于数据结构的问题,temp2中除去第一项剩下的为电影日期
34         for s in temp1:
35             # print s.encode(‘utf-8‘)
36             actor_m.append(s.encode(utf-8))
37         for s in temp2:
38             # print s.encode(‘utf-8‘)
39             actor_d.append(s.encode(utf-8))
40             # 取每部电影日期字符串的前四项,然后转换成int数据类型,就是所演电影的年份
41             actor_y.append(int(s.strip()[:4]))
42         # print actor_m
43         # print actor_d
44         # print actor_y
45         startYear=min(actor_y)  #演员出道年份就是演过电影的年份中的最小项
46         movieNum=len(actor_m)  #统计演员演过的电影数量
47         actor_info={movies:actor_m,date:actor_d}  #将演员演过的电影和电影的年份生成字典格式数据
48         # print actor_info
49         # print startYear
50         # print movieNum
51         return actor_info,movieNum,startYear  #返回演员演过的电影信息,电影数,出道年份三个数据
52     else:
53         return -,-,-  #如果没有抓取到内容,则三项都返回‘-‘
54     # print temp3
55     # print chardet.detect(temp[0].encode(‘utf-8‘))
56 
57 df=pd.read_csv(actors_use.csv)
58 infoList = []  #初始化演员参演电影信息列表
59 numList = []  #初始化演员演过电影的数目列表
60 yearList = []  #初始化演员出道年份列表
61 actorList=[]  #初始化演员姓名列表
62 for i in range(0,3566):
63     #演员电影页网址为‘http://yy.8fkd.com/‘加演员姓名拼音,加‘/DianYing‘
64     url=http://yy.8fkd.com/+str(df.ix[i,actors_id])+/DianYing
65     try:
66         actor_info,movieNum,startYear=getInfo(url)  #调用getInfo函数
67     except:  #如果出错,则将三项标记为error
68         actor_info, movieNum, startYear=(error,error,error)
69     finally:
70         #对演员参演电影信息列表、参演电影数列表、出道年份、演员姓名进行数据添加操作
71         infoList.append(actor_info)
72         numList.append(movieNum)
73         yearList.append(startYear)
74         actorList.append(df.ix[i,leadingRoles])
75         tempDict={actors:actorList,info:infoList,moviesNum:numList,startYear:yearList}
76         df1=DataFrame(tempDict)  #将结果数据转换为DataFrame数据格式
77         df1.to_csv(test.csv,index=False)  #写入文件
78         print i+1,:,df.ix[i, leadingRoles],(,movieNum,)  #打印标记

 

以上是关于2-2 抓取银河演员网上的演员参演电影的信息进行抓取的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate学习笔记 --- 创建基于中间关联表的多对多映射关系

抓取猫眼top100电影信息

MySQL初学者查询帮助,电影和演员

人物-演员-张铎:百科

网络大电影:《美人鱼》演员李应七与90后创业代表碰脸瞬间

00_抓取猫眼电影排行TOP100