Scrapy1.1 より Python3のサポートがサポートされました。
こちらの参考書を元にスクレイピングを行ったので、自分用のメモを残します。
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)
コメント