我有一个包含250个IMDB前250部电影网址的种子文件。
我需要抓取每一个并从中获取一些信息。 我创建了一个获取电影URL并返回我需要的信息的函数。它很棒。我的问题是当我尝试在所有250个URL上运行此功能时。 在成功爬网的certian数量(不是常数!)之后,程序将停止运行。 python.exe进程占用0%CPU,内存消耗不会改变。经过一些调试后,我发现问题在于解析,它只是停止工作,我不知道为什么(卡在查找命令上)。
我正在使用urllib2获取URL的HTML内容,而不是将其解析为字符串,然后继续使用下一个URL(我只对每个字符串执行一次,所有检查的线性时间和萃取)。
知道什么会导致这种行为吗?
编辑:
我附加了一个有问题的函数代码(还有1个,但我猜这是同样的问题)
def getActors(html,actorsDictionary):
counter = 0
actorsLeft = 3
actorFlag = 0
imdbURL = "http://www.imdb.com"
for line in html:
# we have 3 actors, stop
if (actorsLeft == 0):
break
# current line contains actor information
if (actorFlag == 1):
endTag = str(line).find('/" >')
endTagA = str(line).find('</a>')
if (actorsLeft == 3):
actorList = str(line)[endTag+7:endTagA]
else:
actorList += ", " + str(line)[endTag+7:endTagA]
actorURL = imdbURL + str(line)[str(line).find('href=')+6:endTag]
actorFlag = 0
actorsLeft -= 1
actorsDictionary[actorURL] = str(line)[endTag+7:endTagA]
# check if next line contains actor information
if (str(line).find('<td class="name">') > -1 ):
actorFlag = 1
# convert commas and clean \n
actorList = actorList.replace(",",", ")
actorList = actorList.replace("\n","")
return actorList
我用这种方式调用函数:
for url in seedFile:
moviePage = urllib.request.urlopen(url)
print(getTitleAndYear(moviePage),",",movieURL,",",getPlot(moviePage),getActors(moviePage,actorsDictionary))
没有getActors函数
,这很好用这里没有异常(我现在删除了try和catch) 并且在一些迭代之后它被卡在for循环中
编辑2:如果我只运行getActors函数,它运行良好并完成种子文件中的所有URL(250)