Python Scrapy

Python-Scrapyを使う

投稿日:2017年10月24日 更新日:

Scrapyとは?

Scrapyはクローリング・スクレイピングのためのPythonのフレームワークである。

Scrapyを使うと、プログラマーはサイトごとの個別処理を書けばよく、その他の面倒なことをフレームワークがやってくれるようになる。

ドキュメント

サイト バージョン URL 言語
Scrapy公式 最新版 https://scrapy.org/ 英語
Scrapy 1.2 ドキュメント 1.2 http://scrapy-ja.readthedocs.io/ja/latest/index.html 日本語

Ubuntu 16.04へScrapyをインストールする

依存ライブラリのインストール

OpenSSL開発パッケージ ※必須

$ sudo apt install -y libssl-dev libffi-dev

lxml ※必須

 

Scrapy本体のインストール

(pydev1) $ pip install scrapy

専用のvirtualenv にScrapyをインストールして、システムパッケージとの衝突を避けることを強くお勧めします。

http://scrapy-ja.readthedocs.io/ja/latest/intro/install.html

インストール後のバージョン確認

(pydev1) $ scrapy -version
Scrapy 1.0.3 - no active project

 

古いのでアップグレードします。

(pydev1) $ pip install --upgrade scrapy
(pydev1) $ scrapy -version
Scrapy 1.0.3 - no active project

変わらない。ちょっと確認します。

$ pip freeze
Scrapy==1.4.0

これで良しとします。

Scrapyでスクレイピング パターン1

Spiderクラスを作成する

scrapy.Spiderを継承したクラスを作成する。

Spiderを単体で実行する

(pydev1) $ scrapy runspider xxxspider.py -o items.jl

 

 

Scrapyでスクレイピング パターン2

お試しや使い捨てではない限り、ScrapyではProjectを使う。

Scrapyプロジェクトの作成

$ scrapy startproject プロジェクト名

ページダウンロード間隔の設定

settings.cfgに下記を追記する。デフォルトでは0秒間隔(即時)となっている。

DOWNLOAD_DELAY=1

Spiderの作成

 $ scrapy genspider スパイダー名 ドメイン名

$ scrapy genspider yahooNews news.yahoo.co.jp

Spiderの実行

$ scrapy crawl スパイダー名

Scrapy Shell

Scrapy Shellは、cssselectやXPathの特定を支援するインタラクティブシェルである。

$ scrapy shell ‘URL’

このコマンドで起動する。

遭遇したエラー

SyntaxError: Non-ASCII character '\xe3' in file xxx.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

対策 Pythonファイルの先頭に下記を追記した。

# This Python file uses the following encoding: utf-8

出典 https://www.python.org/dev/peps/pep-0263/

 

SyntaxError: EOL while scanning string literal

対策 正規表現部分の’が抜けていた。

 

SyntaxError: invalid syntax

対策 指定箇所周辺の文法を見直した。

 

2017-10-24 23:32:36 [scrapy] INFO: Optional features available: ssl, http11, boto

 

 

Scrapy Cloudで簡単クローラ管理

Scrapyで作ったクローラを管理するGit hubみたいなサイトが、Scrapy Cloudです。

 

 

 

-Python, Scrapy

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Pythonの文法

1行に1文だけ書いていく。 文字列は\”又は\’で囲む 例) urlopen(‘http://www.yahoo.com/’) 例) urlopen(& …

no image

Python urlibなど、スクレイピングTIPS

Python urlibについて Webページを手軽に取得できる。 HTTPヘッダーのカスタマイズ、Basic認証など複雑な処理は苦手。 サードパーティライブラリのRequestsを使おう。 レスポン …

no image

環境構築・Pythonのインストール

おまけ Eclipseのプラグイン PyDevをインストールする マーケットプレースで「python」と検索すると出てくる。 インストールしよう。 インストール完了後、再起動を求められる。 再起動しよ …

no image

URLの構造

http://hoge.sample.com/category/diet?q=drink#ojousama スキーム scheme httpやhttpsのようにプロトコルを表す オーソリティ auth …

no image

lxml.etree.ParserError: Document is empty

lxml.etree.ParserError: Document is empty が出た。このとき。 response=requests.get(”https://discussions.apple …