>  기사  >  백엔드 개발  >  Python 스케줄러를 사용하는 방법

Python 스케줄러를 사용하는 방법

零下一度
零下一度원래의
2017-06-25 10:15:331735검색

 이전 기사의 내용에 이어, 이전 기사에서는 크롤러 스케줄러가 작성되었습니다. 스케줄러는 전체 크롤러 프로그램의 "두뇌"이며 명령 센터라고도 할 수 있습니다. 이제 우리가 해야 할 일은 스케줄러에서 사용되는 다른 구성 요소를 작성하는 것입니다. 첫 번째는 URL 관리자로서 관리자 역할을 하기 때문에 크롤링할 URL과 크롤링한 URL을 구별해야 합니다. 그렇지 않으면 크롤링이 반복됩니다. 여기 튜토리얼에서는 두 개의 URL을 임시로 컬렉션, 즉 메모리에 저장하는 데 사용합니다. 결국 크롤링된 데이터는 상대적으로 작습니다. 물론 캐시나 다른 장소에도 저장할 수 있습니다. 관계형 데이터베이스.

  첫 번째는 스케줄러 초기화 함수에서 urlmanager 객체를 생성하는 것이고,

  두 번째는 add_new_url 메소드를 호출하여 크롤링을 통해 컬렉션에 초기 URL을 추가하는 것이고,

  세 번째는 크롤링 중 검색하는 동안 크롤링할 URL이 있는지 확인합니다.

  네 번째는 컬렉션에서 크롤링할 URL을 가져오고,

  다섯 번째는 페이지에서 파싱된 새로운 URL 세트를 크롤러에 추가하는 것입니다. 다시 컬렉션으로 이동하세요.

다음으로 해야 할 일은 코드를 사용하여 이러한 기능을 구현하는 것입니다.

 1 class UrlManager(object): 2     """docstring for UrlManager""" 3     def __init__(self): 4         self.new_urls = set() 5         self.old_urls = set() 6     #向管理器中添加一个新的url 7     def add_new_url(self,url): 8         if url is None: 9             return10         if url not in self.new_urls and url not in self.old_urls:11             self.new_urls.add(url)12     #从爬取数据中向管理器中批量添加url13     def add_new_urls(self,urls):14         if urls is None or len(urls) == 0:15             return16         for url in urls:17             self.add_new_url(url)18     #判断是否有新的url19     def has_new_url(self):20         return (len(self.new_urls) != 0)21     #从管理器中取出一个新的url22     def get_new_url(self):23         new_url = self.new_urls.pop()24         self.old_urls.add(new_url)25         return new_url

자, 이제 URL 관리자가 완료되었습니다!

다음 단계는 URL 다운로더입니다. 프로그램에서 액세스한 페이지를 저장하는 매우 간단한 기능입니다.

다운로더는 스케줄러에 두 번만 나타납니다.

첫 번째는 초기화 중에 생성됩니다.

두 번째는 URL을 얻은 직후에 페이지를 다운로드하기 위해 호출됩니다.

URL 다운로더에서 원래 튜토리얼은 다음을 사용합니다. urllib 라이브러리는 좀 번거롭다고 생각합니다. 그래서 더 유용한 라이브러리인 요청으로 전환했습니다. 이 라이브러리는 많은 기술적 어려움을 차단하고 방문하려는 페이지를 직접 크롤링하는 데 도움이 될 수 있으며 사용이 매우 간단합니다.

 

 1 import requests 2  3 class HtmlDownloader(object): 4     """docstring for HtmlDownloader"""     5     def download(self,url): 6         if url is None: 7             return  8         response = requests.get(url, timeout = 0.1) 9         response.encoding = 'utf-8'10         if response.status_code == requests.codes.ok:11             return response.text12         else:13             return

  이 코드에 대해 간단히 설명하겠습니다.

  먼저 요청 라이브러리를 가져오세요. 따라서 명령줄에서 직접 다운로드해야 합니다. 설치 요청

 b. 그런 다음 다운로더 클래스 작성을 시작하세요. 이 클래스에는 다운로드라는 한 가지 방법만 있습니다. 이 방법은 먼저 귀하가 제공한 URL을 수락한 다음 해당 URL이 존재하는지 확인합니다.

   c. 그런 다음 두 개의 매개변수를 허용하는 요청의 get 메소드를 호출합니다. 하나는 URL이고 다른 하나는 시간 초과입니다.

   시간 초과는 액세스 시간 초과로 직접 추가됩니다. 시간 제한을 추가하지 않으면 프로그램이 정지됩니다. 즉, 예외를 발생시키지 않고 항상 페이지의 응답을 기다립니다.

   d. 그런 다음 크롤링된 Baidu Encyclopedia 페이지가 utf-8이므로 여기에서 설정하는 것이 가장 좋지만 수동으로 변경하는 것이 좋습니다.

  e. 그런 다음 페이지가 응답하는지 확인합니다. 여기의 코드는 실제로 200입니다. 이는 웹페이지가 정상적으로 응답한다는 의미입니다. 여기에 직접 response.status_code == 200을 쓰면 문제가 없습니다.

   f. 마지막으로 페이지의 모든 콘텐츠를 반환합니다. 여기에 있는 텍스트는 페이지의 모든 코드(html, css, js)를 포함하는 문자열입니다.

위 내용은 Python 스케줄러를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.