Как я могу получить текущий ответ URL в scrapy_splash - PullRequest
0 голосов
/ 22 января 2020

Если я пытаюсь получить URL с помощью response.request.url в моем методе parse (), он возвращает:

http://192.168.99.100:8050/execute

Возвращение URL-адреса в Lua Сценарий работает, но я не знаю, как я могу выдать его в методе parse ().

import scrapy
from scrapy_splash import SplashRequest

class ComputersSpider(scrapy.Spider):
    name = 'computers'
    allowed_domains = ['http://daraz.pk']
    start_urls = ['http://daraz.pk']

    script = ''' 
    function main(splash, args)
    splash.private_mode_enabled = false
    assert(splash:go(args.url))
    assert(splash:wait(1))
    input = assert(splash:select("#q"))
    input:focus()
    input:send_text("computers")

    button = assert(splash:select(".search-box__button--1oH7"))
    button:mouse_click()
    assert(splash:wait(6))
    splash:set_viewport_full()
    return {
        html = splash:html(),
        link = splash:url(),  -- "I WANT TO YIELD THIS THING IN THE PARSE() METHOD"
    }
end '''

def start_requests(self):
    for url in self.start_urls:
        yield SplashRequest(url = url, callback = self.parse, endpoint= 'execute', args = {"wait" : 3, 'lua_source' : self.script})

def parse(self, response):
    link = response.request.url
        yield {
            'URL' : link,
        }

Попытка с использованием response.url, возвращает начальный URL

1 Ответ

0 голосов
/ 23 января 2020

Проблема была решена путем замены ссылки на URL вместо скрипта lua:

return {
    html = splash:html(),
    url = splash:url(),  -- "I WANT TO YIELD THIS THING IN THE PARSE() METHOD"
}

и последующего добавления этой строки в метод разбора:

yield response.url
...