はじめに
この記事は Scrapely
に関する翻訳が主です。
README に書かれた内容を動かしながらどんなものか確認しました。
ざっくりした内容を 秒 で確認したい場合、この記事の項の Scrapelyとは
と まとめ
の2つを読むと良いです。
Scrapelyとは
HTMLページから構造化されたデータを抽出するためのライブラリ。
サンプルのWebページの例と抽出されるデータが与えられた場合、類似したすべてのページのパーサを構築する。
Instance Based Learning
1というアルゴリズムを利用したデータの抽出を行う。2
Installation
Scrapely works in Python 2.7 or 3.3+. It requires numpy and w3lib Python packages.
pip install scrapely
コマンドラインからの利用
$ python -m scrapely.tool myscraper.json
scrapely> help
ocumented commands (type help <topic>):
========================================
a annotate ls s ta
add_template del_template ls_annotations scrape td
al help ls_templates t tl
scrapely>
scrapely.tool の利用は以下の通り
python -m scrapely.tool <scraper_file> [command arg ...]
<scraper_file>
とは テンプレートの情報を保存するファイル名
提供されているコマンドの a
や ta
などはそれぞれ annotate
add_template
などのエイリアスコマンド。
コマンド名 | 説明 |
---|---|
add_template | add_template {url} [--encoding ENCODING] - (alias: ta) |
annotate | annotate {template_id} {data} [-n number] [-f field]- add or test annotation (aliases: a, t) |
del_template | del_template {template_id} - delete template (alias: td) |
ls_annotations | ls_annotations {template} - list annotations (alias: al) |
ls_templates | list templates (aliases: ls, tl) |
scrape | scrape {url} - scrape url (alias: s) |
scraper の作成と テンプレートの追加
scrapely> add_template http://pypi.python.org/pypi/w3lib/1.1
[0] http://pypi.python.org/pypi/w3lib/1.1
scraper から利用可能なテンプレートのリストを表示
scrapely> ls_templates
[0] http://pypi.python.org/pypi/w3lib/1.1
annotation の追加をするために、選択基準のテスト
scrapely> annotate 0 "w3lib 1.1"
[0] '<h1>w3lib 1.1</h1>'
[1] '<title>Python Package Index : w3lib 1.1</title>'
上記コマンドでは2つの要素が取得できました
取得するポジションの指定
scrapely> annotate 0 "w3lib 1.1" -n 0
[0] '<h1>w3lib 1.1</h1>'
テンプレートに annotation のフィールド名を追加
scrapely> annotate 0 "w3lib 1.1" -n 0 -f name
[new] (name) '<h1>w3lib 1.1</h1>'
scrapely> annotate 0 "Scrapy project" -n 0 -f author
[new] '<span>Scrapy project</span>'
テンプレート内の annotation リストを表示
scrapely> ls_annotations 0
[0-0] (name) '<h1>w3lib 1.1</h1>'
[0-1] (author) '<span>Scrapy project</span>'
追加されたテンプレートを使用して、類似ページのスクレイピング
scrapely> scrape http://pypi.python.org/pypi/Django/1.3
[{'author': ['Django Software Foundation'], 'name': ['Django 1.3']}]
Scrapely と Scrapy は名前が似ているけど。。
Scrapy
はWebクローラーを構築するためのアプリケーションフレームワークだが、
Scrapely
はHTMLページから構造化データを抽出するためのライブラリーである。
Scrapely
は Scrapy
よりBeautifulSoupやlxmlに似ている。3
まとめ
通常のサイトスクレイピングではしこしこ セレクタの指定
を記述するが、
Scrapely では サンプルURLの指定
、サンプルデータの指定
により類似ページのスクレイピングを可能にしていた。
この特性を利用してプログラムの知識がない人でもサイトのスクレイピングが可能になるサービス(オープンソース)が存在していた。4
なるほどねーというまとめ(感想)でした。
最後に
本日の Friday I/O でした。
株式会社ワムウでは、毎週金曜日は 興味がある事柄に取り組み、その成果を何らかの形でアウトプットする日としています。ありがとうございました。