Scrapy 備忘メモ
Scrapy メモ
実行方法
- プロジェクトでのscrapy実行時は
> scrapy crawl "name(Spiderの名前)"
各種メソッド
# 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の代わりに、XPathのstring()関数を使って要素の子孫のすべてのテキストを取得できる
>>>response.css('.hbody').xpath('string()').extract_first() '\u3000宇宙航空研究開発機構(JAXA)は8日、金星を回る探査機「あかつき」の軌道修正に成功したと発表した。昨年12月に周回軌道に投入されたが、そのままでは約2年後に日陰に入る時間が長くなり、観測を継続できない恐れがあった。軌道修正で観測期間を5年以上に延長できた。(時事通信)'