Передача ответа селена на обратный вызов (SCRAPY)

Я делаю паука в Scrapy, и я понял, что мне нужно использовать Selenium (может быть, splash, я попробую позже) для первой части, которая представляет собой форму с динамической капчей, поэтому мне нужно войти на страницу, но теперь мне нужно передать ответ на scrapy, потому что я хочу выполнить извлечение с помощью scrapy. Я кое-что читал о ЗАГРУЗКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, но не совсем понимаю.

Итак, это мой код:

def parse(self, response):
     #do something with selenium, break captcha and enter main page
     urlRequest = driver.current_url
                if wasCaptchaBroken:
                    yield Request(url= urlRequest, callback = self.parse_each_url)

def parse_each_url(self,response):

    print("IN : " + response)

    yield{
        'url': response.url,
        'response':response
    }

Мой код никогда не попадает в parse_each_url, поэтому я изменяю свой settings.py:

SPIDER_MIDDLEWARES = {
    'my_project.middlewares.MyProjectSpiderMiddleware': 543,
    'my_project.middlewares.SeleniumMiddleware' : 600
}

И middleware.py:

from scrapy.http import HtmlResponse
from selenium import webdriver

class SeleniumMiddleware(object):
    def process_request(self, request, spider):
        driver = webdriver.FirefoxProfile()
        driver.get(request.url)

        body = driver.page_source
        return HtmlResponse(driver.current_url, body=body, encoding='utf-8', request=request)

Но это то же самое, что мне делать? передать ответ селена моей функции обратного вызова ?? я должен это назвать? или что-то?

Спасибо

Не могли бы вы опубликовать журнал сканирования? Вы можете сделать это с помощью команд scrapy crawl spider --logfile output.log или scrapy crawl spider 2>1 | tee output.log (позже вывод выводится на экран и в файл).

Granitosaurus 19.12.2018 15:56

Ваш код неполный. Где определяется wasCaptchaBroken? Как выглядит parse () после того, как вы переместили обработку Selenium в промежуточное ПО? (или после этого вы вообще не модифицировали parse ()?)

Gallaecio 16.01.2019 14:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
418
0

Другие вопросы по теме