2016-06-21 5 views
1

外部ファイルにスクレイピングルールを定義して、ウェブサイトごとにコアコードを変更する必要がないようにしたいと考えています。このファイルにはいくつかの規則があり、それぞれが異なるWebサイトで有効になります。私はstart_urlsallowed_domainsの外部ファイルを持っていますが、これをルールに近づける最善の方法について、あなたの意見を聞きたいと思います。Scrapy - 外部から設定可能なスクレイピングルール

私はxpathや正規表現のルールを使うことができると思っています。

ありがとうございます!抽出ルールの

答えて

3

1つのオプションは、Parsley DSL

parslepyを使用することです(免責事項:私はparslepyを書いた)Pythonでthe languageの実装です

parslepyで、あなたは、XPathやCSSセレクタを使用することができます。あなたはPython dictを取得します。外部ファイルがルールにJSONオブジェクトである可能性があり

# -*- coding: utf-8 -*- 
import parslepy 
import scrapy 


class HnSpider(scrapy.Spider): 
    name = "hn" 
    allowed_domains = ["news.ycombinator.com"] 
    start_urls = (
     'https://news.ycombinator.com/', 
    ) 
    parselet = parslepy.Parselet({ 
     "_items(tr.athing)": [ 
      { 
       "title": "td.title > a", 
       "source": "td.title span a", 
       "rank": "span.rank", 
       "--(./following-sibling::tr[1])": 
       { 
        "score": "span.score", 
        "age": "span.age", 
        "comments": "span.age ~ a:last-child" 
       } 
      } 
     ] 
    }) 

    def parse(self, response): 
     return self.parselet.parse_fromstring(
      response.body).get("_items", []) 

はここscrapyのための出力項目を保持しているとして、コールバックで使用されるルールで「_items」特殊キーと例のハッカーニュースクモです。スパイダーのself.parseletオブジェクトをこのJSONファイルのデータで初期化する場合は、上記の例のようにコールバックを保持することができます。

リンクには他の特殊キーを使用すると想像することができます。

関連する問題