クローリングハック あらゆるWebサイトをクロールするための実践テクニック
- 作者: 竹添直樹,島本多可子,田所駿佑,萩野貴拓,川上桃子
- 出版社/メーカー: 翔泳社
- 発売日: 2017/09/29
- メディア: Kindle版
- この商品を含むブログを見る
クローリング&スクレイピングのフレームワークであるScrapyを試してみた。 Scrapingはクローリングとスクレイピングを両方やってくれる大きめのフレームワークで、スクレイピングに特化したbeautifulsoupとはその点が異なる。
ここでは上記の書籍に沿ってやってみた。
ᐅ python -V Python 3.6.5 ᐅ scrapy version Scrapy 1.5.1
スクリプト 最もシンプルなスパイダーの実装。 書籍のままだと動かなかった(サイト構成が変わっている)ので少し変えている。
import scrapy class BlogSpider(scrapy.Spider): name = 'blogspider' start_urls = ['https://blog.scrapinghub.com'] def parse(self, response): """ トップページからカテゴリページへのリンクを抜き出してたどる。 """ for url in response.css('ul li a::attr("href")').re('.*/tag/.*'): yield scrapy.Request(response.urljoin(url), self.parse_titles) def parse_titles(self, response): """ カテゴリページからそのカテゴリの投稿のタイトルをすべて抜き出す。 """ for post_title in response.css('div.post-header > h2 > a::text').extract(): yield {'title': post_title}
実行
ᐅ scrapy runspider myspider.py -o items.jl 2018-11-05 22:49:33 [scrapy.utils.log] INFO: Scrapy 1.5.1 started (bot: scrapybot) 2018-11-05 22:49:33 [scrapy.utils.log] INFO: Versions: lxml 4.2.5.0, libxml2 2.9.8, cssselect 1.0.3, parsel 1.5.1, w3lib 1.19.0, Twisted 18.9.0, Python 3.6.5 (default, Apr 25 2018, 14:23:58) - [GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)], pyOpenSSL 18.0.0 (OpenSSL 1.1.0i 14 Aug 2018), cryptography 2.3.1, Platform Darwin-18.0.0-x86_64-i386-64bit (中略) 2018-11-05 22:49:37 [scrapy.core.engine] INFO: Spider closed (finished)
結果であるitems.jlの中身を見る jlはjson lineの略。こういうデータ形式があるらしい。行単位で1レコードがjsonになっているデータ形式。
ᐅ cat items.jl {"title": "<a href=\"https://blog.scrapinghub.com/2016/10/27/an-introduction-to-xpath-with-examples\">An Introduction to XPath: How to Get Started</a>"} {"title": "<a href=\"https://blog.scrapinghub.com/2016/08/25/how-to-crawl-the-web-politely-with-scrapy\">How to Crawl the Web Politely with (以下略)