Scrapy + BrowserMob-Proxy - PullRequest
       31

Scrapy + BrowserMob-Proxy

0 голосов
/ 25 января 2019

Я пытаюсь создать HAR для некоторых сайтов, использующих Scrapy (я делал это в Selenium, но это перегружает мою систему). Я пробовал Scrapy + Splash (и модуль scrapy-splash), но если сайт перенаправляет с оригинальной запрашиваемой ссылки, я не увижу новую ссылку. А также я обнаружил ошибку в слэше, и она останавливается при доступе к моему сайту (в котором была ошибка). Поэтому я пытаюсь получить страницу, используя scrapy + Broswermobproxy. Все работает почти нормально, но у меня нет ответа на странице HAR.

Может быть, есть идеи?

Стандартом является то, что когда я определяю прокси как "http://localhost:port", сценарии работают (максимум),

class MySpider(scrapy.Spider):
    name = "webcapture"

    def __init__(self, **kwargs): #
        self.url = ['someurl']
        proxy_server = Server(BROWSERMOB_PATH)
        time.sleep(1)
        start_proxy_response = requests.post(
            'http://localhost:8080/proxy',
            data={'trustAllServers': 'true'}
            ).json()
        self.proxy_port = start_proxy_response['port']
        custom_settings = { # the proxy seems to work without this also
           'HTTPPROXY_ENABLED': True
        }


    def start_requests(self):
        request = Request(self.url, callback=self.parse_link, dont_filter=True)
        request.meta['proxy'] = 'http://localhost:{}'.format(self.proxy_port)
        yield request


    def parse_link(self, response):
        new_url = 'http://localhost:8080/proxy/{}/har/'.format(self.proxy_port)
        new_request = Request(new_url, callback=self.new_url, dont_filter=True)
        text = response.text # this is the original html page of web it works ok.
        yield new_request # now I want to obtain the HAR...

    def new_url(self, response):
        text = response.text
        return {'har': text} 

Теперь HAR не выдает ошибку, но ничего не содержит :(. Я также использовал мета внутри экземпляра Request. Я также пытался использовать прокси: 'localhost: port' - он не входит в следующие методы после start_request 'https://localhost:port' - возвращает следующую ошибку: twisted.web._newclient.ResponseNeverReceived: [] следующий метод после start_request

Любая другая (я имел в виду даже всплеск, чтобы вернуть истинную страницу перенаправления) будет высоко оценена.

...