LoginSignup
7
6

More than 5 years have passed since last update.

アルゴリズムを利用したWeb スクレイピングのライブラリ Scrapely

Last updated at Posted at 2017-09-15

はじめに

この記事は 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> とは テンプレートの情報を保存するファイル名

提供されているコマンドの ata などはそれぞれ 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ページから構造化データを抽出するためのライブラリーである。
ScrapelyScrapy よりBeautifulSoupやlxmlに似ている。3

まとめ

通常のサイトスクレイピングではしこしこ セレクタの指定 を記述するが、
Scrapely では サンプルURLの指定サンプルデータの指定 により類似ページのスクレイピングを可能にしていた。
この特性を利用してプログラムの知識がない人でもサイトのスクレイピングが可能になるサービス(オープンソース)が存在していた。4
なるほどねーというまとめ(感想)でした。

最後に

本日の Friday I/O でした。
株式会社ワムウでは、毎週金曜日は 興味がある事柄に取り組み、その成果を何らかの形でアウトプットする日としています。ありがとうございました。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6