2014-01-13 2 views
3

저는 python을 처음 사용합니다. 아래 함수는 imdb에서 영화와 감독 이름을 제공합니다. 그것은 단일 링크에 대해 잘 작동합니다. 그러나 큰 링크 목록으로 실행할 때 ConnectionResetError : [WinError 10054] 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.웹 스크래핑 실행시 ConnectionResetError.

어떻게해야합니까? 코드를 개선하는 방법?

def get_director(movie_url): 
    html=urllib.request.urlopen(movie_url).read() 
    soup=BeautifulSoup(html,"lxml") 
    movie=soup.find("h1","header") 
    movie_name=movie.find("span","itemprop").text 
    d=soup.find("div","txt-block") 
    director=d.find("span","itemprop").text 
    return {'Movie':movie_name,'Director':director} 
+0

작동 여부는 잘 모르겠지만 [time.sleep] (http://docs.python.org/2/library/time.html#time.sleep) 메소드를 사용하여 get_director 메소드. 서버를 너무 빨리 때릴 수도 있습니다. 통화를 1 초 이상 지연하면 문제를 해결하는 데 도움이됩니다. –

+0

당신이 지정한대로 시도했습니다. 같은 오류가 계속납니다. – ven93

+0

나는 여전히 그것이 일종의 속도 제한 문제라고 생각한다. [Andrew Gorcester] (http://stackoverflow.com/users/471671/andrew-gorcester)는 사용자 에이전트와 요청 간의 지연을 말하고 실험합니다. –

답변

0

이것은 속도 제한이나 서버 측의 다른 제한이며 코드 자체의 결함이 아닌 것 같습니다. imdb가 스크래핑에 대한 공식적인 요금이나 기타 제한 사항을 게시했는지 확인해야합니다. 그렇지 않다면, 실험을하고 오류가 멈출 때까지 뒤로 물러 설 수 밖에 없습니다.

+0

당신이 옳았어요! 어쨌든, 내 프로그램은 250 링크에서 데이터를 검색하는 데 약 20 분이 걸렸습니다. 어떻게 코드를 최적화 할 수 있습니까? – ven93

+1

속도 제한 때문인 경우 속도 제한이 무엇인지 파악하고이를 정확히 준수하거나 원하는 데이터를 얻는 다른 방법을 찾는 것 외에는 코드를 최적화 할 수 없습니다. –