Scrapy 備忘メモ

Scrapy メモ

実行方法

  • プロジェクトでのscrapy実行時は
> scrapy crawl "name(Spiderの名前)"

各種メソッド

  • css selector
    Response.css()メソッドの戻り値はSelectroListオブジェクトを取得
    例は以下
# class topicsのリンクを抜き出す
response.css('ul.topics a::attr("href")')

SelectorListオブジェクトのメソッド

  • extract()
    ノードの一覧を文字列のlistとして取得する

  • extract_first()
    ノードの一覧の最初の要素を文字列として取得

  • re(regex)
    ノードの一覧のうち、引数に指定した正規表現regex)にマッチする部分のみを文字列のlistとして取得する

  • re_first(regex)
    ノードの一覧のうち、引数に指定した正規表現regex)にマッチする最初の部分を文字列として取得する

  • css(query)
    ノードの一覧の要素に対して、引数に指定したCSSセレクター(query)にマッチするノードの一覧をSelectorListとして取得する

  • xpath(query)
    ノードの一覧の要素に対して、引数に指定したXPath(query)にマッチするノードの一覧をSelectorListとして取得する

Scrapy Shellにて(?)

  • shelp()
    Scrapy Shellのヘルプ表示

  • fetch(request_or_url)
    引数でしていたRequestオブジェクトまたはURLのページを新しく取得し、requestやresponseなどの変数を置き換える

  • view(response) 引数でしていたResponseオブジェクトをブラウザーで表示する

細かい使い方

  • HTML要素内のテキストのみを取得した場合は、::text疑似セレクターでテキストノードを取得してからextract()を適用するとよし
# title 要素からextract()すると、タグを含む文字列が得られる。
 >>> response.css(' title'). extract() 
['<title >「 あかつき」 軌道 修正に成功 | 2016/ 4/ 8( 金) 20: 56 - Yahoo! ニュース </ title >']

>>> response.css(' title:: text') # テキストノードを取得 する。
 [<Selector xpath =' descendant-or-self:: title/ text()' data ='「 あかつき」 軌道 修正 に 成功 | 2016/ 4/ 8( 金) 20: 56 - Yaho - Yahoo!ニュース'>] 

# テキスト ノード から extract() する と、 タグ を 含ま ない 文字列 が 得 られる。
>>>response.css('title::text').extract()
['「あかつき」軌道修正に成功|2016/4/8(金)20:56-Yahoo!ニュース']

#extract_first()を使うとlistではなく文字列が得られる。
>>>response.css('title::text').extract_first()
'「あかつき」軌道修正に成功|2016/4/8(金)20:56-Yahoo!ニュース'
  • 抜き出したい対象(p要素内など)にbr要素やa要素などが含まれてるときに、すべてのテキストを抽出したい CSSセレクターの::textの代わりに、XPathstring()関数を使って要素の子孫のすべてのテキストを取得できる
>>>response.css('.hbody').xpath('string()').extract_first()
'\u3000宇宙航空研究開発機構(JAXA)は8日、金星を回る探査機「あかつき」の軌道修正に成功したと発表した。昨年12月に周回軌道に投入されたが、そのままでは約2年後に日陰に入る時間が長くなり、観測を継続できない恐れがあった。軌道修正で観測期間を5年以上に延長できた。(時事通信)'