Scrapy-spiders

提供:Dev Guides
移動先:案内検索

スクレイピー-スパイダー

説明

Spiderは、Webサイトを介してリンクをたどり、ページから情報を抽出する方法を定義するクラスです。

スクレイピーのデフォルトのスパイダーは次のとおりです-

スクレイピースパイダー

それは他のすべてのクモが継承しなければならないクモです。 次のクラスがあります-

class scrapy.spiders.Spider

次の表は、scrapy.Spiderクラスのフィールドを示しています-

Sr.No Field & Description
1

name

それはあなたのクモの名前です。

2

allowed_domains

これは、クモがクロールするドメインのリストです。

3

start_urls

これは、スパイダーがクロールを開始する後のクロールのルートとなるURLのリストです。

4

custom_settings

これらは、スパイダーを実行するときに、プロジェクト全体の設定から上書きされる設定です。

5

crawler

これは、クモのインスタンスがバインドされているクローラーオブジェクトにリンクする属性です。

6

settings

これらは、スパイダーを実行するための設定です。

7

logger

これは、ログメッセージの送信に使用されるPythonロガーです。

8

from_crawler(crawler,*args,*kwargs)*

これはクラスメソッドであり、スパイダーを作成します。 パラメータは次のとおりです-

  • クローラー-クモのインスタンスがバインドされるクローラー。
  • * args(list)*-これらの引数はメソッド__init _()_に渡されます。
  • * kwargs(dict)*-これらのキーワード引数は__init _()_メソッドに渡されます。
9

start_requests()

特定のURLが指定されておらず、スパイダーがスクラップ用に開かれている場合、Scrapyは_start_requests()_メソッドを呼び出します。

10

make_requests_from_url(url)

URLをリクエストに変換するために使用されるメソッドです。

11

parse(response)

このメソッドは、応答を処理し、さらにURLに続くスクラップデータを返します。

12

log(message[,level,component])

これは、スパイダーロガーを介してログメッセージを送信するメソッドです。

13

closed(reason)

このメソッドは、クモが閉じるときに呼び出されます。

スパイダー引数

スパイダー引数は、開始URLを指定するために使用され、次のようにcrawlコマンドと -a オプションを使用して渡されます-

scrapy crawl first_scrapy -a group = accessories

次のコードは、スパイダーが引数を受け取る方法を示しています-

import scrapy

class FirstSpider(scrapy.Spider):
   name = "first"

   def __init__(self, group = None, *args, **kwargs):
      super(FirstSpider, self).__init__(*args, **kwargs)
      self.start_urls = ["http://www.example.com/group/%s" % group]

ジェネリックスパイダー

汎用スパイダーを使用して、スパイダーのサブクラスを作成できます。 彼らの目的は、特定のルールに基づいてウェブサイト上のすべてのリンクをたどり、すべてのページからデータを抽出することです。

次のスパイダーで使用される例では、次のフィールドを持つプロジェクトがあると仮定しましょう-

import scrapy
from scrapy.item import Item, Field

class First_scrapyItem(scrapy.Item):
   product_title = Field()
   product_link = Field()
   product_description = Field()

クロールスパイダー

CrawlSpiderは、リンクをたどって複数のページを破棄する一連のルールを定義します。 次のクラスがあります-

class scrapy.spiders.CrawlSpider

以下はCrawlSpiderクラスの属性です-

規則

クローラーがリンクをたどる方法を定義するルールオブジェクトのリストです。

次の表は、CrawlSpiderクラスのルールを示しています-

Sr.No Rule & Description
1

LinkExtractor

クモがどのようにリンクをたどり、データを抽出するかを指定します。

2

callback

各ページがスクレイプされた後に呼び出されます。

3

follow

リンクをたどり続けるかどうかを指定します。

parse_start_url(応答)

初期応答を解析できるようにすることで、アイテムまたはリクエストオブジェクトを返します。

-解析関数はCrawlSpiderによってそのロジックを実装するために使用されるため、ルールの作成中に解析以外の解析関数の名前を変更してください。

スパイダーがdemoexample.comのホームページをクロールし、すべてのページ、リンク、および解析を_parse_items_メソッドで収集し始める次の例を見てみましょう-

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class DemoSpider(CrawlSpider):
   name = "demo"
   allowed_domains = ["www.demoexample.com"]
   start_urls = ["http://www.demoexample.com"]

   rules = (
      Rule(LinkExtractor(allow =(), restrict_xpaths = ("//div[@class = 'next']",)),
         callback = "parse_item", follow = True),
   )

   def parse_item(self, response):
      item = DemoItem()
      item["product_title"] = response.xpath("a/text()").extract()
      item["product_link"] = response.xpath("a/@href").extract()
      item["product_description"] = response.xpath("div[@class = 'desc']/text()").extract()
      return items

XMLFeedSpider

XMLフィードからスクレイピングし、ノードを反復処理するスパイダーの基本クラスです。 次のクラスがあります-

class scrapy.spiders.XMLFeedSpider

次の表は、イテレータとタグ名を設定するために使用されるクラス属性を示しています-

Sr.No Attribute & Description
1

iterator

使用するイテレータを定義します。 iternodes、html、または_xml_のいずれかです。 デフォルトは_iternodes_です。

2

itertag

反復するノード名を含む文字列です。

3

namespaces

_register_namespace()_メソッドを使用して名前空間を自動的に登録する(プレフィックス、uri)タプルのリストによって定義されます。

4

adapt_response(response)

スパイダーミドルウェアから到着するとすぐに、スパイダーが解析を開始する前に、応答を受信して​​応答本文を変更します。

5

parse_node(response,selector)

指定されたタグ名に一致する各ノードに対して呼び出されると、応答とセレクターを受け取ります。

-このメソッドをオーバーライドしないと、スパイダーは動作しません。

6

process_results(response,results)

スパイダーから返された結果と応答のリストを返します。

CSVFeedSpider

各行を反復処理し、応答としてCSVファイルを受信し、_parse_row()_メソッドを呼び出します。 次のクラスがあります-

class scrapy.spiders.CSVFeedSpider

次の表は、CSVファイルに関して設定できるオプションを示しています-

Sr.No Option & Description
1

delimiter

各フィールドのコンマ( '、')区切り文字を含む文字列です。

2

quotechar

各フィールドの引用符( '"')を含む文字列です。

3

headers

これは、フィールドを抽出できるステートメントのリストです。

4

parse_row(response,row)

応答と各行とヘッダーのキーを受け取ります。

CSVFeedSpiderの例

from scrapy.spiders import CSVFeedSpider
from demoproject.items import DemoItem

class DemoSpider(CSVFeedSpider):
   name = "demo"
   allowed_domains = ["www.demoexample.com"]
   start_urls = ["http://www.demoexample.com/feed.csv"]
   delimiter = ";"
   quotechar = "'"
   headers = ["product_title", "product_link", "product_description"]

   def parse_row(self, response, row):
      self.logger.info("This is row: %r", row)
      item = DemoItem()
      item["product_title"] = row["product_title"]
      item["product_link"] = row["product_link"]
      item["product_description"] = row["product_description"]
      return item

サイトマップSpider

Sitemapsの助けを借りてSitemapSpiderは、robots.txtからURLを見つけてWebサイトをクロールします。 次のクラスがあります-

class scrapy.spiders.SitemapSpider

次の表は、SitemapSpiderのフィールドを示しています-

Sr.No Field & Description
1

sitemap_urls

サイトマップを指すクロールするURLのリスト。

2

sitemap_rules

タプル(正規表現、コールバック)のリストです。正規表現は正規表現であり、コールバックは正規表現に一致するURLを処理するために使用されます。

3

sitemap_follow

これは、従うべきサイトマップの正規表現のリストです。

4

sitemap_alternate_links

単一のURLでたどる代替リンクを指定します。

SitemapSpiderの例

次のSitemapSpiderはすべてのURLを処理します-

from scrapy.spiders import SitemapSpider

class DemoSpider(SitemapSpider):
   urls = ["http://www.demoexample.com/sitemap.xml"]

   def parse(self, response):
      # You can scrap items here

次のSitemapSpiderは、コールバックでいくつかのURLを処理します-

from scrapy.spiders import SitemapSpider

class DemoSpider(SitemapSpider):
   urls = ["http://www.demoexample.com/sitemap.xml"]

   rules = [
      ("/item/", "parse_item"),
      ("/group/", "parse_group"),
   ]

   def parse_item(self, response):
      # you can scrap item here

   def parse_group(self, response):
      # you can scrap group here

次のコードは、URLに /sitemap_company があるrobots.txtのサイトマップを示しています-

from scrapy.spiders import SitemapSpider

class DemoSpider(SitemapSpider):
   urls = ["http://www.demoexample.com/robots.txt"]
   rules = [
      ("/company/", "parse_company"),
   ]
   sitemap_follow = ["/sitemap_company"]

   def parse_company(self, response):
      # you can scrap company here

次のコマンドに示すように、SitemapSpiderを他のURLと組み合わせることもできます。

from scrapy.spiders import SitemapSpider

class DemoSpider(SitemapSpider):
   urls = ["http://www.demoexample.com/robots.txt"]
   rules = [
      ("/company/", "parse_company"),
   ]

   other_urls = ["http://www.demoexample.com/contact-us"]
   def start_requests(self):
      requests = list(super(DemoSpider, self).start_requests())
      requests += [scrapy.Request(x, self.parse_other) for x in self.other_urls]
      return requests

   def parse_company(self, response):
      # you can scrap company here...

   def parse_other(self, response):
      # you can scrap other here...