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 requestsのエラー処理

requests.exceptions.SSLError: HTTPSConnectionPool URLをクロールしていると、こんなエラーが出た。 File “/home/ty/projects/o …

no image

PythonでWebサイトをクローリング・スクレイピングの実践

 各モジュールの公式ドキュメント モジュール バージョン ドキュメントURL 言語 Python 3 https://docs.python.jp/3/index.html 日本語 urllib ht …

no image

【Python クローリング&スクレイピング】を読んで

紀伊国屋で買いました。 カバー外してます。 クローリングフレームワーク lxml Beautiful Soup Scrapy クローリング→データ収集 スクレイピング→収集したものからデータ抽出するこ …

no image

PythonでHello World!

Pythonファイルの拡張子は「.py」 Pythonファイルは「.py」で保存する。 例)helloworld.py 文字出力は print(‘出力する文字’) 例)prin …

no image

Ubuntu 16.04で pycharm でPython2 開発環境構築