web-dev-qa-db-ja.com

Scrapyにダウンロードリクエストごとにユーザーエージェントをログに表示させる方法は?

私は学んでいます Scrapy 、Webクロールフレームワーク。

ScrapyプロジェクトのUSER_AGENTファイルにsettings.pyを設定できることはわかっています。 Scrapyを実行すると、INFOログにUSER_AGENTの値が表示されます。
このUSER_AGENTは、クロールするサーバーへのすべてのダウンロード要求で設定されます。

しかし、私は このソリューション の助けを借りて複数のUSER_AGENTランダムにを使用しています。このランダムに選択されたUSER_AGENTが機能すると思います。確認したいのですが。では、ダウンロードリクエストごとにScrapyshowsUSER_AGENTを作成して、ログでUSER_AGENTの値を確認するにはどうすればよいですか?

14

参考までに。

fake-useragent に基づいて単純な RandomUserAgentMiddlewareミドルウェア を実装しました。

fake-useragentのおかげで、ユーザーエージェントのリストを構成する必要はありません-それはそれらをピックアップします ブラウザの使用統計に基づいて実際のデータベース =。

26
alecxe

あなたはこれを使用することによってそれを見ることができます:

def parse(self, response):
    print response.request.headers['User-Agent']

scrapy-fake-useragent pythonライブラリを使用できます。これは完全に機能し、世界の使用統計に基づいてユーザーエージェントを選択します。ただし、上記のコードを使用してすでに完全に機能しているかどうかを確認してください。適用時に間違えた場合は、説明書をよくお読みください。

12
Aminah Nuraini

使用している 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",
    ]
11
Alex Chekunkov

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)

2
Rolf