Нажмите кнопку в Scrapy-Splash - PullRequest
3 голосов
/ 21 июня 2019

Я пишу программу scrapy-splash, и мне нужно нажать на кнопку отображения на веб-странице, как показано на рисунке ниже, чтобы отобразить данные для 10-го издания, чтобы я мог их очистить. У меня есть код, который я попробовал ниже, но он не работает. Информация, которая мне нужна, доступна только при нажатии на кнопку дисплея. ОБНОВЛЕНИЕ: Все еще борюсь с этим, и я должен верить, что есть способ сделать это. Я не хочу очищать JSON, потому что это может быть красным флагом для владельцев сайтов.

import scrapy
from ..items import NameItem

class LoginSpider(scrapy.Spider):
    name = "LoginSpider"
    start_urls = ["http://www.starcitygames.com/buylist/"]

    def parse(self, response):

        return scrapy.FormRequest.from_response(
        response,
        formcss='#existing_users form',
        formdata={'ex_usr_email': 'email123@example.com', 'ex_usr_pass': 'password123'},
        callback=self.after_login
        )


    def after_login(self, response):
        item = NameItem()
        display_button= response.xpath('//a[contains(., "- Display>>")]/@href').get()
        response.follow(display_button, self.parse)
        item["Name"] = response.css("div.bl-result-title::text").get()
        return item

Snapshot of Webpage HTML Code

1 Ответ

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

Ваш код не может работать, потому что нет элемента привязки и атрибута href. Нажатие на кнопку отправит XMLHttpRequest на http://www.starcitygames.com/buylist/search?search-type=category&id=5061, и необходимые данные будут найдены в ответе JSON.

  1. Чтобы проверить URL-адрес запроса и ответ, откройте Dev Tools -> Network -> XHR и нажмите Display.
  2. На вкладке Headers вы найдете URL запроса, а на вкладках Preview или Response вы можете просмотреть JSON.
  3. Как видите, вам понадобится категория id для создания URL-адреса запроса. Вы можете найти это, проанализировав элемент script, найденный с этим XPath //script[contains(., "categories")]
  4. Затем вы можете отправить свой запрос от паука на http://www.starcitygames.com/buylist/search?search-type=category&id=5061 и получить нужные данные.
$ curl 'http://www.starcitygames.com/buylist/search?search-type=category&id=5061'
{"ok":true,"search":"10th Edition","results":[[{"id":"46269","name":"Abundance","subtitle":null,"condition":"NM\/M","foil":true,"is_parent":false,"language":"English","price":"20.000","rarity":"Rare","image":"cardscans\/MTG\/10E\/en\/foil\/Abundance.jpg"},{"id":"176986","name":"Abundance","subtitle":null,"condition":"PL","foil":true,"is_parent":false,"language":"English","price":"12.000","rarity":"Rare","image":"cardscans\/MTG\/10E\/en\/foil\/Abundance.jpg"}....

Как видите, вам даже не нужно заходить на сайт или Splash.

...