web-dev-qa-db-ja.com

スクレイピー:スパイダーでアイテムを使用する方法とパイプラインにアイテムを送信する方法

私はscrapyが初めてで、タスクは簡単です:

特定のeコマースWebサイトの場合:

  • すべてのウェブサイトページをクロールする

  • 製品ページを探す

  • URLが製品ページを指している場合

  • アイテムを作成する

  • アイテムを処理してデータベースに保存する

スパイダーを作成しましたが、製品は単純なファイルに印刷されています。

私の質問は、プロジェクト構造についてです:スパイダーでアイテムを使用する方法とパイプラインにアイテムを送信する方法ですか?

アイテムとパイプラインを使用したプロジェクトの簡単な例を見つけることができません。

14
farhawa
  • クモでアイテムを使用する方法は?

さて、アイテムの主な目的は、クロールしたデータを保存することです。 scrapy.Itemsは基本的に辞書です。アイテムを宣言するには、クラスを作成し、scrapy.Fieldを追加する必要があります。

import scrapy

class Product(scrapy.Item):
    url = scrapy.Field()
    title = scrapy.Field()

これで、製品をインポートして、スパイダーで使用できます。

高度な情報については、ドキュメントを確認してください here

  • パイプラインにアイテムを送信する方法は?

最初に、custom pipelineを使用するようスパイダーに指示する必要があります。

settings.pyファイルで:

ITEM_PIPELINES = {
    'myproject.pipelines.CustomPipeline': 300,
}

これで、パイプラインを記述して、アイテムを操作できます。

pipeline.pyファイルで:

from scrapy.exceptions import DropItem

class CustomPipeline(object):
   def __init__(self):
        # Create your database connection

    def process_item(self, item, spider):
        # Here you can index your item
        return item

最後に、spiderで、アイテムが満たされたらyieldする必要があります。

spider.py例:

import scrapy
from myspider.items import Product

class MySpider(scrapy.Spider):
    name = "test"
    start_urls = [
        'http://www.exemple.com',
    ]
def parse(self, response):
    doc = Product()
    doc['url'] = response.url
    doc['title'] = response.xpath('//div/p/text()')
    yield doc # Will go to your pipeline

これがお役に立てば幸いです、ここにpipelinesのドキュメントがあります: Item Pipeline

39
Adrien Blanquer