私は学んでいます Scrapy 、Webクロールフレームワーク。
ScrapyプロジェクトのUSER_AGENT
ファイルにsettings.py
を設定できることはわかっています。 Scrapyを実行すると、INFO
ログにUSER_AGENT
の値が表示されます。
このUSER_AGENT
は、クロールするサーバーへのすべてのダウンロード要求で設定されます。
しかし、私は このソリューション の助けを借りて複数のUSER_AGENT
ランダムにを使用しています。このランダムに選択されたUSER_AGENT
が機能すると思います。確認したいのですが。では、ダウンロードリクエストごとにScrapyshowsUSER_AGENT
を作成して、ログでUSER_AGENT
の値を確認するにはどうすればよいですか?
参考までに。
fake-useragent
に基づいて単純な RandomUserAgentMiddleware
ミドルウェア を実装しました。
fake-useragent
のおかげで、ユーザーエージェントのリストを構成する必要はありません-それはそれらをピックアップします ブラウザの使用統計に基づいて実際のデータベース =。
あなたはこれを使用することによってそれを見ることができます:
def parse(self, response):
print response.request.headers['User-Agent']
scrapy-fake-useragent
pythonライブラリを使用できます。これは完全に機能し、世界の使用統計に基づいてユーザーエージェントを選択します。ただし、上記のコードを使用してすでに完全に機能しているかどうかを確認してください。適用時に間違えた場合は、説明書をよくお読みください。
使用している solution にログを追加できます。
#!/usr/bin/python
#-*-coding:utf-8-*-
import random
from scrapy import log
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware
class RotateUserAgentMiddleware(UserAgentMiddleware):
def __init__(self, user_agent=''):
self.user_agent = user_agent
def process_request(self, request, spider):
ua = random.choice(self.user_agent_list)
if ua:
request.headers.setdefault('User-Agent', ua)
# Add desired logging message here.
spider.log(
u'User-Agent: {} {}'.format(request.headers.get('User-Agent'), request),
level=log.DEBUG
)
#the default user_agent_list composes chrome,IE,firefox,Mozilla,opera,netscape
#for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php
user_agent_list = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
]
EDIT:ユーザーエージェントを変更する機能を探していたので、ここに来ました。
AlecxeのRandomUserAgentに基づいて、これは、クロールごとに1回だけ、事前定義されたリストからのみユーザーエージェントを設定するために使用するものです(scrapyv。0.24および0.25で機能します)。
"""
Choose a user agent from the settings but do it only once per crawl.
"""
import random
import scrapy
SETTINGS = scrapy.utils.project.get_project_settings()
class RandomUserAgentMiddleware(object):
def __init__(self):
super(RandomUserAgentMiddleware, self).__init__()
self.fixedUserAgent = random.choice(SETTINGS.get('USER_AGENTS'))
scrapy.log.msg('User Agent for this crawl is: {}'.
format(self.fixedUserAgent))
def process_start_requests(self, start_requests, spider):
for r in start_requests:
r.headers.setdefault('User-Agent', self.fixedUserAgent)
yield r
あなたの質問に対する実際の答えは次のとおりです:ローカルウェブサーバーを使用してUAを確認し、ログを確認してください(例:* NIXの/var/log/Apache2/access.log)