序文
Pythonクローラー、データ分析、Webサイト開発、その他のケースチュートリアルビデオはオンラインで無料で視聴できます
https://space.bilibili.com/523606542
Python学習交換グループ:1039645993
プロジェクト要件
クロール技術を訓練するためにクロール初心者に捧げられたウェブサイト(http://quotes.toscrape.com)で有名なことわざをクロールします。
プロジェクトを作成する
クロールを開始する前に、新しいScrapyプロジェクトを作成する必要があります。コードを保存する予定のディレクトリに移動し、次のコマンドを実行します。
(base) λ scrapy startproject quotes
New Scrapy project 'quotes', using template directory 'd:\anaconda3\lib\site- packages\scrapy\templates\project', created in:
D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫\quotes
You can start your first spider with:
cd quotes
scrapy genspider example example.com
最初に、新しく作成されたクローラープロジェクトディレクトリ(/ quotesディレクトリ)に切り替えます。次に、コマンドを実行してクローラーを作成します。
D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫 (master)
(base) λ cd quotes\
D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫\quotes (master)
(base) λ scrapy genspider quotes quotes.com
Cannot create a spider with the same name as your project
D:\课程-爬虫课程\02 框架爬虫\备课代码-框架爬虫\quotes (master)
(base) λ scrapy genspider quote quotes.com
Created spider 'quote' using template 'basic' in module:
quotes.spiders.quote
このコマンドは、次の内容の引用符ディレクトリを作成します。
quotes
│ items.py
│ middlewares.py
│ pipelines.py
│ settings.py
│ __init__.py │
├─spiders
│ quote.py
│ __init__.py
robots.txt
ロボットプロトコルはrobots.txt(小文字の統一)とも呼ばれ、ウェブサイトのルートディレクトリに保存されているASCIIエンコードのテキストファイルです。通常、ウェブ検索エンジンのウェブスパイダーに、このウェブサイトのどのコンテンツを使用してはいけないかを通知します。検索エンジンで検索されます。クローラーで何を取得できますか?
ロボットの合意は仕様ではなく、慣例です。
# filename:settings.py
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
分析ページ
クローラープログラムを作成する前に、まずクロールするページを分析する必要があります。主流のブラウザには、ページを分析するためのツールまたはプラグインがあります。ここでは、Chromeブラウザの開発者ツール([ツール]→[開発者ツール])を使用してページを分析します。
データ情報
Chromeブラウザでhttp://quotes.toscrape.comページを開き、「reviewelement」を選択してHTMLコードを表示します。
すべてのラベルがラベルでラップされていることがわかります
蜘蛛を書く
ページを分析した後、次のステップはクローラーを作成することです。Scrapyでクローラーを記述し、scrapy.Spiderでコードを記述します。Spiderは、単一のWebサイト(または一部のWebサイト)からデータをクロールするためにユーザーが作成するクラスです。
ダウンロード用の初期URL、Webページ内のリンクをたどる方法、ページのコンテンツを分析する方法、およびアイテムを生成する方法を抽出する方法が含まれています。
Spiderを作成するには、scrapy.Spiderクラスを拡張し、次の3つのプロパティを定義する必要があります。
- 名前:スパイダーを区別するために使用されます。名前は一意である必要があり、異なるスパイダーに同じ名前を設定することはできません。
- start_urls:起動時にSpiderによってクロールされるURLのリストが含まれます。したがって、最初に取得されるページはそのうちの1つになります。後続のURLは、最初のURLから取得したデータから抽出されます。
- parse():スパイダーのメソッドです。呼び出されると、各初期URLがダウンロードされた後に生成されたResponseオブジェクトが、唯一のパラメーターとして関数に渡されます。このメソッドは、返されたデータ(応答データ)の解析、データの抽出(アイテムの生成)、およびさらに処理が必要なURLのRequestオブジェクトの生成を担当します。
import scrapy
class QuoteSpider(scrapy.Spider):
name = 'quote'
allowed_domains = ['quotes.com']
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
pass
以下は、見積もりの実現についての簡単な説明です。
フォーカス:
- nameは、genspider中に指定されるクローラーの名前です。
- Allowed_domainsは、クローラーがクロールできるドメイン名です。クローラーはこのドメイン名でのみWebページをクロールできるため、記述する必要はありません。
- start_urlsは、反復可能なタイプであるScrapyによってクロールされるWebサイトです。もちろん、複数のWebページがある場合は、リストに複数のURLを書き込むことができます。
リスト控除の形式が一般的に使用されます。 - 解析はコールバック関数と呼ばれ、このメソッドの応答は、start_urlsURLが要求を送信した後に取得される応答です。もちろん、応答を受信する他の関数を指定することもできます。ページ解析機能は通常、次の2つのタスクを完了する必要があります:
ページ内のデータの抽出(re、XPath、CSSセレクター)、ページ内のリンクの抽出、およびリンクされたページのダウンロード要求の生成。
ページ解析関数は通常、ジェネレーター関数として実装され、ページから抽出されたすべてのデータとリンクされたページへのすべてのダウンロード要求は
、yieldステートメントによってScrapyエンジンに送信されます。
分析データ
import scrapy
...
def parse(self, response):
quotes = response.css('.quote')
for quote in quotes:
text = quote.css('.text::text').extract_first()
auth = quote.css('.author::text').extract_first()
tages = quote.css('.tags a::text').extract()
yield dict(text=text, auth=auth, tages=tages)
フォーカス:
- response.css()は、css構文を直接使用して、応答内のデータを抽出できます。
- start_urlsには複数のURLを記述でき、リスト形式で区切ることができます。
- extract()は、cssオブジェクト内のデータを抽出するためのもので、抽出された後はリストになります。それ以外の場合はオブジェクトになります。そしてextract_first()は、最初のものを抽出することです
クローラーを実行する
/ quotesディレクトリでscrapyクロール引用符を実行して、クローラープロジェクトを実行します
クローラーを実行した後はどうなりましたか?
Scrapyは、Spiderのstart_urls属性のURLごとにscrapy.Requestオブジェクトを作成し、コールバック関数としてparseメソッドをRequestに割り当てます。
Requestオブジェクトがスケジュールされた後、scrapy.http.Responseオブジェクトが生成され、処理のためにspider parse()メソッドに返送されます。
コードが完了したら、クローラーを実行してデータをクロールし、シェルでスクレイプクロール<SPIDER_NAME>コマンドを実行してクローラー「quote」を実行し、クロールされたデータをcsvファイルに保存します。
(base) λ scrapy crawl quote -o quotes.csv
2020-01-08 20:48:44 [scrapy.utils.log] INFO: Scrapy 1.8.0 started (bot: quotes)
....
クローラーの実行が終了するのを待った後、quote.csvファイルが現在のディレクトリに生成され、その中のデータはcsv形式で保存されます。
-oは複数の形式への保存をサポートします。保存方法も非常に簡単で、ファイルにサフィックス名を付けるだけです。(Csv、json、pickleなど。