Синтаксический анализ всплеска скрапа - PullRequest
0 голосов
/ 20 июня 2019

enter image description here

Я тестирую экземпляр-заставку со scrapy 1.6, следуя https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash и https://aaqai.me/notes/scrapy-splash-setup. Мой паук:

import scrapy
from scrapy_splash import SplashRequest
from scrapy.utils.response import open_in_browser

class MySpider(scrapy.Spider):
    start_urls = ["http://yahoo.com"]
    name = 'mytest'

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse, endpoint='render.html', args={'wait': 7.5},)

    def parse(self, response):
        # response.body is a result of render.html call; it
        # contains HTML processed by a browser.
        open_in_browser(response)
        return None

Вывод открывается в блокноте, а не в браузере. Как я могу открыть это в браузере?

1 Ответ

2 голосов
/ 21 июня 2019

Если вы используете промежуточное программное обеспечение-заставку, и все ответы-заставки поступают в обычный объект-ответ, доступ к которому вы можете получить через response.css и response.xpath.В зависимости от того, какую конечную точку вы используете, вы можете выполнять JavaScript и другие вещи.

Если вам нужно перемещаться по странице и другим вещам, вам нужно написать сценарий LUA для выполнения с соответствующей конечной точкой.Что касается анализа вывода, он автоматически переходит в объект ответа.

Избавьтесь от open_in_browser Я не совсем уверен, что вы делаете, но если все, что вы хотите сделать, это проанализировать страницу, вы можете сделать так, кактак что

body = response.css('body').extract_first()
links = response.css('a::attr(href)').extract()

Если бы вы могли уточнить ваш вопрос, большинство людей не хотят просматривать ссылки, чтобы попытаться угадать, с чем у вас проблемы.

Обновление для уточненного вопроса:

Звучит так, как будто вам может понадобиться оболочка Scrapy с Splash. Это позволит вам поэкспериментировать с селекторами:

scrapy shell 'http://localhost:8050/render.html?url=http://page.html&timeout=10&wait=0.5'

Чтобы получить доступ к Splash в экземпляре браузера, просто перейдите наhttp://0.0.0.0:8050/ вы вводите URL там.Я не уверен в методе из учебника, но именно так вы можете взаимодействовать с сеансом Splash.

...