Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie den Python-Scheduler

So verwenden Sie den Python-Scheduler

零下一度
零下一度Original
2017-06-25 10:15:331734Durchsuche

Um mit dem Inhalt des vorherigen Artikels fortzufahren, wurde im vorherigen Artikel der Crawler-Scheduler geschrieben, der das „Gehirn“ des gesamten Crawler-Programms ist und auch als Kommandozentrale bezeichnet werden kann. Jetzt müssen wir noch andere Komponenten schreiben, die im Scheduler verwendet werden. Der erste ist der URL-Manager. Da er als Manager fungiert, muss er zwischen den zu crawlenden und den bereits gecrawlten URLs unterscheiden, andernfalls wird das Crawling wiederholt. Das Tutorial hier verwendet eine Set-Sammlung, um die beiden URLs vorübergehend in der Sammlung zu speichern, also im Speicher. Schließlich sind die gecrawlten Daten relativ klein. Natürlich können sie auch an anderen Orten gespeichert werden, beispielsweise im Cache relationale Datenbank.

Das erste Mal besteht darin, das URL-Manager-Objekt in der Scheduler-Initialisierungsfunktion zu erstellen.

Das zweite Mal besteht darin, die Methode add_new_url aufzurufen, um die ursprüngliche URL zur gecrawlten Sammlung hinzuzufügen

Das dritte Mal besteht darin, festzustellen, ob während des Crawling-Vorgangs eine zu crawlende URL vorhanden ist.

Das vierte Mal besteht darin, die zu crawlende URL aus der Sammlung zu entnehmen.

Die Das fünfte Mal besteht darin, der Crawling-Sammlung erneut einen neuen Satz von URLs hinzuzufügen, die von der Seite analysiert wurden.

Als Nächstes müssen wir dann Code verwenden, um diese Funktionen zu implementieren:

 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

Okay, das war's, der URL-Manager ist fertig!

Der nächste Schritt ist der URL-Downloader. Dabei handelt es sich um eine sehr einfache Funktion, die die vom Programm aufgerufene Seite speichert.

Der Downloader erscheint nur zweimal im Scheduler:

Das erste Mal wird während der Initialisierung erstellt

Das zweite Mal erfolgt unmittelbar nach dem Abrufen der URL, um die Seite herunterzuladen

Im URL-Downloader verwendet das Original-Tutorial die URL-Bibliothek, was meiner Meinung nach etwas umständlich ist. Also bin ich auf eine nützlichere Bibliothek umgestiegen: Anfragen. Diese Bibliothek kann mir dabei helfen, viele technische Schwierigkeiten zu überwinden und die Seiten, die wir besuchen möchten, direkt zu crawlen, und sie ist sehr einfach zu verwenden.

 

 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

Lassen Sie mich kurz auf diesen Code eingehen:

Zuerst müssen Sie die Anfragen importieren Dies liegt daran, dass es sich um eine Bibliothek eines Drittanbieters handelt. Geben Sie daher Folgendes in der Befehlszeile ein: b. Diese Klasse hat nur eine Methode, die heruntergeladen wird. Diese Methode akzeptiert zunächst die von Ihnen angegebene URL und stellt dann fest, ob sie vorhanden ist.

c. Rufen Sie dann die Get-Methode der Anforderungen auf, die zwei Parameter akzeptiert, einer ist die URL und der andere ist das Timeout.

Das Timeout wird von mir selbst hinzugefügt, nämlich das Zugriffs-Timeout. Wenn kein Timeout hinzugefügt wird, friert das Programm ein, was bedeutet, dass es immer auf die Antwort der Seite wartet, ohne eine Ausnahme auszulösen.

d. Da die gecrawlte Baidu-Enzyklopädie-Seite utf-8 ist, ist es am besten, sie hier festzulegen. Obwohl Anfragen sie intelligent beurteilen, ist es besser, sie manuell zu ändern . .

e. Stellen Sie dann fest, ob die Seite „codes.ok“ tatsächlich 200 ist, was bedeutet, dass die Webseite normal reagiert. Es ist kein Problem, wenn Sie hier „response.status_code == 200“ schreiben.

f. Geben Sie schließlich den gesamten Inhalt der Seite zurück. Der Text hier ist eine Zeichenfolge, die den gesamten Code (HTML, CSS, JS) einer Seite enthält.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Python-Scheduler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn