LoginSignup
0
0

More than 3 years have passed since last update.

ScrapyのUser-Agentを動的に変更する

Posted at

Scrapyを使っていて、Spiderのコンストラクタ内からユーザエージェントを動的に変えたいケースがあったのでやってみました。

実装はかなり簡単だったのですが、ほしい情報にうまくたどり着けなかった(結局公式に書いてあった)ので、同じ悩みを持つ人のために書いておきます。

バージョン情報

Scrapy 2.1.0

やること

Spiderのコンストラクタ内でself.user_agentにユーザエージェント文字列を設定します。

こうすることで、デフォルトで動くUserAgentMiddlewareがSpiderの属性からユーザエージェントを拾って使ってくれます。


class CustomCrawlSpider(CrawlSpider):
    name = 'crawl'

    def __init__(self, *args, **kwargs):
        self.user_agent = 'custom-user-agent'

原典

言われなきゃわからん!!と思いましたが、よくよく公式ドキュメントを読んでみるとUserAgentMiddlewareに書かれていました。

In order for a spider to override the default user agent, its user_agent attribute must be set.

GitHubで該当の箇所を見てみるとたしかにspider.user_agentを参照してます。

その他の設定方法

Scrapyはコマンドラインで与えた引数がSpiderの属性になるので、引数としてuser_agentを渡すことでもユーザエージェントを指定可能です。

scrapy crawl quotes -a user_agent=custom-user-agent

ユーザエージェントが固定値で良いのであれば、settings.pyやSpiderのcustom_settingsにUSER_AGENTを設定することでも対応できます。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0