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 抓取银河演员网上的演员参演电影的信息进行抓取的主要内容,如果未能解决你的问题,请参考以下文章