首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击Scrapy-Splash中的显示按钮

单击Scrapy-Splash中的显示按钮
EN

Stack Overflow用户
提问于 2019-06-26 00:06:43
回答 2查看 1.7K关注 0票数 5

我正在抓取下面的网页使用scrapy splash,http://www.starcitygames.com/buylist/,我必须登录到它,以获得我需要的数据。这很好用,但是为了获得我需要的数据,我需要单击display按钮,这样我就可以抓取这些数据,在单击按钮之前,我需要的数据是不可访问的。我已经得到了一个答案,告诉我我不能简单地点击显示按钮并刮掉显示的数据,我需要刮掉与该信息相关的JSON网页,但我担心的是,刮掉JSON将是网站所有者的一个危险信号,因为大多数人不打开JSON数据页面,与计算机相比,需要几分钟的时间才能找到它,这将是快得多的。所以我想我的问题是,有没有办法刮掉我的点击显示的网页,或者我别无选择,只能刮掉JSON页面?这就是我到目前为止所得到的。但它并没有点击按钮。

代码语言:javascript
复制
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': 'abc@example.com', 'ex_usr_pass': 'password'},
        callback=self.after_login
        )



    def after_login(self, response):
        item = NameItem()
        display_button = response.xpath('//a[contains(., "Display>>")]/@href').get()

        yield response.follow(display_button, self.parse)

        item["Name"] = response.css("div.bl-result-title::text").get()
        return item

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-28 12:44:05

你可以使用浏览器的开发人员工具来跟踪点击事件的请求,这是一个很好的JSON格式,也不需要cookie (登录):

http://www.starcitygames.com/buylist/search?search-type=category&id=5061

唯一需要填充的是与此请求相关的category_id,它可以从HTML中提取并在您的代码中声明。

类别名称:

代码语言:javascript
复制
//*[@id="bl-category-options"]/option/text()

类别id:

代码语言:javascript
复制
//*[@id="bl-category-options"]/option/@value

使用JSON比解析HTML简单得多。

票数 7
EN

Stack Overflow用户

发布于 2019-07-04 06:08:29

我尝试使用lua脚本,用scrapy-splash来模拟点击。它是有效的,你只需要将它与scrapy集成在一起并操纵内容即可。我离开了脚本,在这个脚本中我完成了与scrapy的集成。

代码语言:javascript
复制
function main(splash)
  local url = 'https://www.starcitygames.com/login'
  assert(splash:go(url))
  assert(splash:wait(0.5))
  assert(splash:runjs('document.querySelector("#ex_usr_email_input").value = "your@email.com"'))
  assert(splash:runjs('document.querySelector("#ex_usr_pass_input").value = "your_password"'))
  splash:wait(0.5)
  assert(splash:runjs('document.querySelector("#ex_usr_button_div button").click()'))
  splash:wait(3)
  splash:go('https://www.starcitygames.com/buylist/')
  splash:wait(2)
  assert(splash:runjs('document.querySelectorAll(".bl-specific-name")[1].click()'))
  splash:wait(1)
  assert(splash:runjs('document.querySelector("#bl-search-category").click()'))
  splash:wait(3)
  splash:set_viewport_size(1200,2000)
  return {
    html = splash:html(),
    png = splash:png(),
    har = splash:har(),
  }
end

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56758090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档