前回に引き続きてScrapyでのデータの取得です。
★関連記事
・CentOS環境の python3.6(pyenv環境)で Scrapy を利用してみる(Scrapy その1)
・CentOS7でscrapy-splashを使ってJavaScriptの解析(Scrapy その3)
・Scrapyでデータの保存をmongodbにして見る(Scrapy その4)
・CentOS7でscrapy-splashを使ってJavaScriptの解析 その2(Scrapy その5)
前回は「startproject」で作成したプロジェクトからデータを取得していただけでしたので、今回は取得したURLにさらに接続してデータの取得を行います。
クローラーっぽい動きになってきます。
まずは今回から複数のページにアクセスするために一度に大量のアクセスを行わないように、一度接続した後に3秒の時間差を置きます。
1 2 3 |
DOWNLOAD_DELAY = 3 |
次に本体となる「spiders/devcolla.py」のファイルを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# -*- coding: utf-8 -*- import scrapy from sample_crawler.items import SampleCrawlerItem class DevcollaSpider(scrapy.Spider): name = 'devcolla' allowed_domains = ['developer-collaboration.com'] start_urls = ['https://developer-collaboration.com/'] def parse(self, response): for quote in response.css('article.post-list'): item = SampleCrawlerItem() item['url'] = quote.css('a::attr(href)').extract_first() yield scrapy.Request(item['url'], self.parse_topics) def parse_topics(self, response): item = SampleCrawlerItem() item['title'] = response.css('h1.entry-title::text').extract_first() yield item |
最初の「parse」のyeildの2番目の引数で、「parse_topics」の関数を呼んでいます。
こちらにURLの引数を渡し、新しいクローリングを発生させています。
これで複数のページにクローリングが実施できます。
外部のサイトなどに飛ばないように「allowed_domains」などで対象のドメインを設定して範囲を絞ったっりします。
今回はこんなところまでで。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。