Tech memo of scrapy 2

Scrapyを使ったスクレイピングのメモ その2

Scrapyを使ったスクレイプのやり方と、その流れと、雑多なメモその2

その1はこちら

Cookieの設定

Requestにcookiesとして受け口があるので、そこにdictで設定する。 楽ちん。 例のスクリプトは適当です。

  def start_requests(self):
        urls = [
            'https://yahoo.co.jp'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse, cookies=[{'name': 'yahooo', 'value': 'yaahooo', 'domain':'.yahoo.co.jp', 'path':'/'}]

リンクの追従

自分で書いたパーサー内部でパーサーを呼ぶといい感じにやってくれる。これも、わかりやすくて好き。 スクリプトはあくまで適当に書いてます。

  #例として、search.yahoo.co.jpを取得し、
  # div class="contents"の中身を取得
 # a class="next" のリンクがあれば、そのリンクをもう一度取得する
  def start_requests(self):
        urls = [
            'https://seach.yahoo.co.jp/realtime'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for i in response.css('div.contents'):
            yield {
                'href' : i.css('a').attrib['href'],
                'title': i.css('a::text').get(),
                'description': i.css('p.description::text').get()
            }

        next_page = response.css("a.next")
        if len(next_page) > 0:
            next_url = next_page.css('a').attrib['href']
            #自分を参照することで、次のリンクを取得しに行くように書ける
            yield scrapy.Request(next_url, callback=self.parse)

スクレイプするときやる手順

全体の流れとして、まずはscrapy shellを使ってパーサーを書く。 scrapy shellはインタラクティブに書けるので、xpath、cssのあたりを付ける。 shellである程度かけたら、個別のspiderにする。

ここまでがベースで、そこからは各自の環境ごとの要因が増えていく感じ。

取得したデータの扱い系はitems周りを見る(保存先の振り分けなどetc)

ルールベースでのリンクの抽出をもうちょっとうまく書きたいとき

大体のところの概要は把握できたとおもうので、、あとは使いたいところを深堀りしていこう。 後はbuildinservice周りを調べたい。

connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

アマゾンセール情報サイト アマセール管理人

Jp, Tokyo https://connvoi.com