用Python抓取网页

用Python抓取网页,python,python-3.x,web-crawler,Python,Python 3.x,Web Crawler,我有一个IMDB前250部电影的250个URL的种子文件 我需要抓取它们中的每一个,并从中获取一些信息。 我创建了一个函数,它获取电影的URL并返回我需要的信息。它工作得很好。我的问题是,当我试图在所有250个URL上运行此函数时。 经过一定的量不是恒定的!对于成功爬网的URL,程序停止运行。python.exe进程占用0%的CPU,内存消耗不变。经过一些调试,我发现问题出在解析上,它只是停止工作,我不知道为什么要使用find命令 我使用urllib2获取URL的HTML内容,然后将其解析为一个

我有一个IMDB前250部电影的250个URL的种子文件

我需要抓取它们中的每一个,并从中获取一些信息。 我创建了一个函数,它获取电影的URL并返回我需要的信息。它工作得很好。我的问题是,当我试图在所有250个URL上运行此函数时。 经过一定的量不是恒定的!对于成功爬网的URL,程序停止运行。python.exe进程占用0%的CPU,内存消耗不变。经过一些调试,我发现问题出在解析上,它只是停止工作,我不知道为什么要使用find命令

我使用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
这在没有getActors函数的情况下非常有效

这里没有提出任何例外,我暂时取消了尝试和捕获 经过一些迭代之后,它被困在for循环中


编辑2:如果我只运行getActors函数,它工作得很好,并完成种子文件250中的所有URL

函数有多大?你能发布它吗,或者它的缩小版?你也试过调试itattaching pdb吗?它被卡住的find命令是什么?它是如何被卡住的?只是旋转,还是会引发异常?顺便说一句,你可能会发现有趣的是,整个IMDb数据库都可以在这里下载:而不是试图刮去他们的web界面。我附上了一些代码。我不能使用imdb,这是一个大学项目…:如果strline.find>-1:出现错误,则行缩进。您是在c&p期间制动的,还是代码中的外观?
for url in seedFile:
    moviePage = urllib.request.urlopen(url) 
    print(getTitleAndYear(moviePage),",",movieURL,",",getPlot(moviePage),getActors(moviePage,actorsDictionary))