Scarpy1.1でクローリングする

Scrapy1.1 より Python3のサポートがサポートされました。

Python による Web スクレイピング

こちらの参考書を元にスクレイピングを行ったので、自分用のメモを残します。

Scrapyの使い方

Python3.5 の環境が整っているものとします。

scarpy をインストールします。pip からインストールできます。

pip install scrapy

インストールされたか確認しましょう。

conda list | grep Scrapy
Scrapy 1.1.1 pip

Scrapyプロジェクトを作成します。

scrapy startproject wikiSpider

# 以下が表示
New Scrapy project 'wikiSpider', using template directory '/home/vagrant/.pyenv/versions/anaconda3-4.1.0/lib/python3.5/site-packages/scrapy/templates/project', created in:
/home/vagrant/work/wikiSpider

You can start your first spider with:
cd wikiSpider
scrapy genspider example example.com

以下のような構成の wikiSprider ディレクトリが作成されます。

- wikiSpider
 ・ __init.py__
 ・ items.py
 ・ pipelines.py
 ・ settings.py
 - spiders
  ・ __init.py__

実行結果に出力されたコマンドを打てば、Spider(scrapyのスクレピング部分)の雛形を作成してくれます。
今回は article という名前で、en.wikipedia.orgをスクレピングする Sprideを作成します。

cd wikiSpider
scrapy genspider article en.wikipedia.org

wikiSpider/spiders/article.pyというファイルが作成されます。
続いて実際にデータを取得するプログラムを記述します。

vim wikiSpider/spiders/articleSpider.py
from scrapy.selector import Selector
from scrapy import Spider
from wikiSpider.items import Article

class ArticleSpider(Spider):
    name = "article"
    allowed_domains = ["en.wikipedia.org"]
    start_urls = ["http://en.wikipedia.org/wiki/Main-Page",
                  "http://en.wikipedia.org/wiki/Python_%28programming_language%29"]

    def parse(self, response):
        item = Article()
        title = response.xpath('//h1/text()')[0].extract()
        print("Title is:"+title)
        item['title'] = title
        return item

items.py ではページタイトルを取得するため、titleフィールドを定義します。
この Itemオブジェクトは Webサイトの1ページを表します。

vim wikiSpider/items.py
from scrapy import Item, Field

class Article(Item):
    title = Field()

scrapyの実行には scrapy crawlコマンドを使用します。
引数には作成した Spiderを name の部分ンを指定します(今回は article)。

scrapy crawl article

#デバッグ情報とともに以下が表示されていれば成功。
Title is:Main Page
Title is:Python (programming language)

参考

Python による Web スクレイピング

Python 3をサポートしたScrapy 1.1が公開されました

コメント

タイトルとURLをコピーしました