Python 在“刮擦飞溅”中单击按钮

Python 在“刮擦飞溅”中单击按钮,python,scrapy,scrapy-splash,splash-js-render,Python,Scrapy,Scrapy Splash,Splash Js Render,我正在编写一个scrapy splash程序,我需要单击网页上的显示按钮,如下图所示,以便显示第10版的数据,以便我可以对其进行刮取。我有我在下面尝试过的代码,但它不起作用。只有单击“显示”按钮才能访问我需要的信息更新:仍在挣扎,我必须相信有办法做到这一点。我不想刮去JSON,因为这可能是网站所有者的一个危险信号 import scrapy from ..items import NameItem class LoginSpider(scrapy.Spider): name = "Lo

我正在编写一个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

您的代码无法工作,因为没有锚元素和href属性。单击该按钮将向
http://www.starcitygames.com/buylist/search?search-type=category&id=5061
,您想要的数据可以在JSON响应中找到

  • 要检查请求URL和响应,请打开Dev Tools->Network->XHR并单击
    Display
  • 标题
    选项卡中可以找到请求URL,在
    预览
    响应
    选项卡中可以检查JSON
  • 如您所见,您需要一个category
    id
    来构建请求URL。您可以通过解析使用此XPath找到的
    script
    元素[contains(,“categories”)]
  • 然后您可以将您的请求从spider发送到
    http://www.starcitygames.com/buylist/search?search-type=category&id=5061
    并获取所需的数据

  • 正如您所见,您甚至不需要登录网站或
    Splash

    ,这听起来似乎可以工作,但我仍然有点困惑。我应该将该url设置为我的起始url吗?或者我应该让我的程序从原始url重定向到该页面?如果我只是将该url作为我的开始url传递,我会有点担心网站所有者将该程序识别为网络爬虫程序,因为大多数人不会访问网站的JSON数据页。@tnorth2620如果你知道你要刮取的类别,是的,你可以在开始url列表中硬编码它们。如果您使用无头浏览器,则更可能被检测到(如果在这种情况下)。使用此解决方案,您只需向web API发出请求,类似于您试图刮取的web应用程序。如果这样做有效(而且确实有效),请坚持下去,因为这是您案例中最简单、最有效的技术。如果您仍然想使用Splash,您应该从这里开始:这里要了解有关使用plain Scrapy处理动态内容的更多信息,请参阅
    $ 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"}....