gengogo5 / general_crawler

汎用クローラのプロトタイプ
0 stars 0 forks source link

User-Agentを動的に変えられるようにする #34

Closed gengogo5 closed 4 years ago

gengogo5 commented 4 years ago

DBのRulesに設定されたUser-Agent文字列をユーザエージェントとしてクロールに使用できるようにする。

gengogo5 commented 4 years ago

参考 https://doc-ja-scrapy.readthedocs.io/ja/latest/topics/settings.html#user-agent

パラメータとしてはrobots.txt用と通常リクエスト用に分かれている模様 Requestのヘッダに設定された値が優先される。

ただし、Requestだと差し込み箇所が多い sitemap_crawlerとregular_crawlerはRequestに直接触れていないので、 容易には追加できないように見える。

gengogo5 commented 4 years ago

UserAgentMiddlewareRobotsTxtMiddlewareを拡張して差し替えれば良さそう

gengogo5 commented 4 years ago

認識が違っていた。 RobotsTxtMiddlewareは、クロール先のrobots.txtに書かれているUser-Agentとの照合用のユーザエージェントを持つようだ。

言ってみればrobots.txt用のユーザエージェントで、ROBOTSTXT_USER_AGENTパラメータで指定する。デフォルトはNone。 Noneの場合はリクエストのUser-Agentが使われる。

リクエストのUser-Agentを上書きするにはUserAgentMiddlewareを使えば良い。 具体的には、スパイダーにuser_agentフィールドを持たせればいいだけ。

スパイダーがデフォルトのユーザー・エージェントを上書きするには、その user_agent 属性を設定する必要があります。