>  기사  >  백엔드 개발  >  Python3은 많은 영화 정보를 얻습니다.

Python3은 많은 영화 정보를 얻습니다.

高洛峰
高洛峰원래의
2016-10-29 10:44:172129검색

연구소에서는 이 기간 동안 영화 정보를 수집해야 하는데, 이 데이터 세트에는 4,000개 이상의 영화 제목이 포함되어 있습니다. 영화 이름에 해당하는 영화 정보를 크롤링하려면 크롤러를 작성해야 합니다.

실제로 실제 운영에서는 크롤러가 전혀 필요 없고, 간단한 Python 기반만 있으면 됩니다.

전제 조건:

Python3 구문 기본

HTTP 네트워크 기본

첫 번째 단계는 API 공급자를 결정하는 것입니다. IMDb는 가장 큰 영화 데이터베이스이지만, 사용할 수 있는 API를 제공하는 OMDb 웹사이트가 있습니다. 이 웹사이트의 API는 매우 친숙하고 사용하기 쉽습니다.

http://www.omdbapi.com/

두 번째 단계는 URL 형식을 결정하는 것입니다.

Python3은 많은 영화 정보를 얻습니다.

세 번째 단계는 기본 요청 라이브러리 사용 방법을 이해하는 것입니다.

http://cn.python-requests.org/zh_CN/latest/

Python3은 많은 영화 정보를 얻습니다.

요청을 사용해야 하는 이유, 아니요 urllib.request를 사용하는 것은 어떻습니까?

이 Python 라이브러리는 온갖 이상한 문제가 발생하기 쉽기 때문에 충분히 고민했습니다...

네 번째 단계는 Python 코드를 작성하는 것입니다.

내가 원하는 것은 파일을 한 줄씩 읽은 다음 해당 줄에 있는 영화 이름을 사용하여 영화 정보를 얻는 것입니다. 소스 파일이 크기 때문에 readlines()는 모든 영화 이름을 완전히 읽을 수 없으므로 한 줄씩 읽습니다.

import requests

for line in open("movies.txt"):
    s=line.split('%20\n')
    urll='http://www.omdbapi.com/?t='+s[0]
    result=requests.get(urll)
    if result:
        json=result.text
        print(json)
        p=open('result0.json','a')
        p.write(json)
        p.write('\n')
        p.close()

API를 더 쉽게 사용할 수 있도록 모든 영화 이름 파일을 미리 포맷하고 모든 공백을 "%20"으로 대체했습니다(그렇지 않으면 오류가 보고됩니다). 이 기능은 Visual Studio Code를 사용하여 수행할 수 있습니다.

Python3은 많은 영화 정보를 얻습니다.

인코딩 시 GBK 인코딩을 선택하세요. 그렇지 않으면 다음 오류가 발생합니다.

1 UnicodeDecodeError: 'gbk' 코덱은 바이트 0xff를 디코딩할 수 없습니다. 위치 0: 잘못된 멀티바이트 시퀀스

다섯 번째 단계는 최적화 및 예외 처리입니다.

세 번째는 예외 처리입니다.

전체 코드는 아래에 게시되어 있습니다.

다음으로 차를 마시고 프로그램이 어떻게 실행되는지 확인하세요!
import requests 3 
key=[‘’]

for line in open("movies.txt"):
    try:
        #……
    except TimeoutError:
        continue
    except UnicodeEncodeError:
        continue
    except ConnectionError:
        continue

# -*- coding: utf-8 -*-

import requests
import time

key=['xxxxx','yyyyy',zzzzz','aaaaa','bbbbb']
i=0

for line in open("movies.txt"):
    try:
        i=(i+1)%5
        s=line.split('%20\n')
        urll='http://www.omdbapi.com/?t='+s[0]+'&apikey='+key[i]
        result=requests.get(urll)
        if result:
            json=result.text
            print(json)
            p=open('result0.json','a')
            p.write(json)
            p.write('\n')
            p.close()
            time.sleep(1)
    except TimeoutError:
        continue
    except UnicodeEncodeError:
        continue
    except ConnectionError:
        continue
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.