Я делаю паука в 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)
Но это то же самое, что мне делать? передать ответ селена моей функции обратного вызова ?? я должен это назвать? или что-то?
Спасибо
Ваш код неполный. Где определяется wasCaptchaBroken? Как выглядит parse () после того, как вы переместили обработку Selenium в промежуточное ПО? (или после этого вы вообще не модифицировали parse ()?)
Не могли бы вы опубликовать журнал сканирования? Вы можете сделать это с помощью команд
scrapy crawl spider --logfile output.log
илиscrapy crawl spider 2>1 | tee output.log
(позже вывод выводится на экран и в файл).