ホームページ  >  記事  >  バックエンド開発  >  Pythonスケジューラの使い方

Pythonスケジューラの使い方

零下一度
零下一度オリジナル
2017-06-25 10:15:331772ブラウズ

前回の内容の続きですが、前回の記事では、スケジューラはクローラプログラム全体の「頭脳」であり、コマンドセンターとも言えます。ここで、スケジューラで使用される他のコンポーネントを作成する必要があります。 1 つ目は URL マネージャーです。これはマネージャーとして機能するため、クロールされる URL とクロールされた URL を区別する必要があります。そうしないと、クロールが繰り返されます。ここのチュートリアルでは、セット コレクションを使用して 2 つの URL をコレクション、つまりメモリに一時的に保存します。もちろん、クロールされたデータは、キャッシュやメモリなどの他の場所に保存することもできます。リレーショナルデータベース。

1回目は、スケジューラの初期化関数でurlmanagerオブジェクトを作成することです、

2回目は、add_new_urlメソッドを呼び出して、クローリングでコレクションに初期URLを追加することです、

3回目は、クローリング中、取得中このプロセスでは、クロールする URL があるかどうかを判断します。

4 回目は、コレクションからクロールされる URL を取得します。

5 回目は、ページから解析された新しい 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 ダウンローダーです。これは、プログラムがアクセスしたページを保存する非常に単純な機能です。

ダウンローダーはスケジューラーに 2 回のみ表示されます:

1 回目は初期化中に作成されます

2 回目は URL を取得した直後に、ページをダウンロードするために呼び出されます

URL ダウンローダーでは、元のチュートリアルでは次のメソッドが使用されますurllib ライブラリですが、これは少し面倒だと思います。そこで、より便利なライブラリである request に切り替えました。このライブラリは、多くの技術的な問題をブロックし、アクセスしたいページを直接クロールするのに役立ちます。また、使い方は非常に簡単です。

 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

このコードについて簡単に説明します:

a. まず、リクエストライブラリをインポートします。そのため、コマンドラインで「pip」と入力する必要があります。 install request

b .次に、ダウンローダー クラスの作成を開始します。このクラスには、download というメソッドが 1 つだけあります。このメソッドは、まず指定した URL を受け入れ、次にそれが存在するかどうかを判断します。

c. 次に、リクエストの get メソッドを呼び出します。これは 2 つのパラメータを受け入れます。1 つは URL で、もう 1 つはタイムアウトです

タイムアウトはアクセス タイムアウトです。タイムアウトが追加されていない場合、プログラムはフリーズします。つまり、例外をスローせずに常にページの応答を待ちます。

d. 次に、返されるレスポンスのエンコーディングを設定します。クロールされた Baidu Encyclopedia ページは utf-8 なので、ここで設定するのが最適ですが、リクエストは手動で変更することをお勧めします。

e. 次に、ページが応答するかどうかを確認します。ここでの codes.ok は実際には 200 であり、これは Web ページが正常に応答することを意味します。ここで、response.status_code == 200 を直接記述しても問題ありません。

f. 最後に、ページのすべてのコンテンツを返します。ここでのテキストは、ページのすべてのコード (html、css、js) を含む文字列です。

以上がPythonスケジューラの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。