使用Python抓取网页

时间:2012-04-19 15:13:28

标签: python python-3.x web-crawler

我有一个包含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 += "&#44; " + 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(",","&#44; ")
    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)

0 个答案:

没有答案