プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Python
  • 【Python】Scrapyのデバッグ方法
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Python】Scrapyのデバッグ方法

06.08

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

スパイダーをVSCodeのステップ実行でデバッグする。

scrapy.cfgファイルがあるディレクトリに対して、ファイルを任意の名前をつけて保存します。(例:xxx_debug.pyなど)

1
2
3
4
5
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from projectディレクトリ名.spiders.spiderファイル名 import XXXSpider
process = CrawlerProcess(settings=get_project_settings())
process.crawl(XXXSpider)

from scrapy.utils.project import get_project_settings

projectフォルダ配下のsettings.pyを読み込むために利用します。

実行方法

VSCode上でSpider内の任意の行に赤ポチをつけます。

これで上記用意したコード(xxx_debug.py)内でRun→Start Debuggingをクリックすればそこでブレークポイントが止まってデバッグすることが可能です。

Python loggingでデバッグする。

設定

1
2
LOG_FILE = 'log.txt'
LOG_LEVEL = 'DEBUG'

LOG_FILE

出力するログファイル名を指定します。

LOG_LEVEL

ログレベルを指定します。指定したログレベル以上のレベルのログを出力してくれます。本番を想定するならINFOと設定しておくのが良いでしょう。

ちなみに、上記のDEBUGはデフォルトのログレベルになるので記述しなくても問題はないです。

サンプル

1
2
3
4
5
    def parse(self, response):
        logging.debug({
          'status': response.status,
          'url': response.url,
        })

出力結果

スパイダーを実行したら以下のようなログが出力されます。

1
2023-06-08 22:13:29 [root] DEBUG: {'status': 200, 'url': 'https://qiita.com'}

parseコマンドを使う

parseコマンドを使えばメソッドや階層などまで出力できます。ユースケースとしては「想定した宛先(URL)に送られてきて、想定した結果が返ってくるかを一覧でまとめて取得できます。)

以下のように指定します。

1
scrapy parse --spider=spider名 -c 実行したいparseメソッド名 -d 調べたい深さレベル  URL

具体例

1
scrapy parse --spider=kinokuniya_spider -c parse https://kinokuniya.com

出力結果

1
2
3
4
5
6
7
8
>>> STATUS DEPTH LEVEL 1 <<<
# Scraped Items  ------------------------------------------------------------
[{'category': 'トレンド',
  'titles': ['Vue3の衰退を招いたのは<script setup>とCompositionAPIかもしれない という考察',
             '【JavaScript】DataTablesが超便利すぎる',
             'Pythonでボリンジャーバンド、売買シグナル、バックテスト']}]
# Requests  -----------------------------------------------------------------
[]

STATUS DEPTH LEVEL 1

階層の深さレベル1を指しています。リンクを辿るほど深さが増してレベルも増えます。

ページネーションのあるページをクロールする例で言えば、1ページ目がレベル1、2ページ目がレベル2、3ページ目がレベル3という形になります。

Scraped Items

スクレイピングで取得した項目を指しています。

Requests

リクエストしたurlが表示されます。次のリンクがない場合は空配列が表示されます。

scrapy shellを使う

scrapy shellはターミナルなどで以下のコマンドを実行する機能もありますが、spiderから直接呼び出すことも可能です。

1
2
3
4
5
6
7
8
9
from scrapy.shell import inspect_response
 
class QiitaTrend1dSpider(scrapy.Spider):
    name = "xxx"
    allowed_domains = ["xxx.com"]
    start_urls = ["https://xxx.com"]
 
    def parse(self, response):
        inspect_response(response,self)

それでspiderを実行すると、inspect_responseを仕込んだ箇所でターミナルが止まりそこからシェルが起動してデバッグできるようになります。(Railsをやったことがある方であればイメージ的にbyebugに近いです。)

止めた状態で変数を自由にデバッグしたりすることができるのでxpathの動作確認などがスムーズに行えたりします。

 

スポンサーリンク
  • 2023 06.08
  • miyabisan2
  • コメントを書く
  • Python
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2023 08.13

    【Lambda】PythonでLamda関数を定義して実行する

  2. 2023 06.04

    【Python】ログ出力ライブラリlogging

  3. 2018 06.18

    【Python】基礎知識(言語の特徴、フレームワーク)

  4. 2023 06.09

    【NoSQL】MongoDBの基本

  5. 2023 06.26

    【Python】モジュール、自作モジュール、パッケージ、ライブラリ

  6. 2023 06.24

    【Python】PySimpleGUIについて

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Python】スクレイピングプログラムの実装時の細か…

【Python】Scrapy Item、Item Lo…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • WebRTC
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー