标签: splash-js-render

当javascript发出多个请求时,如何在Scrapy+Splash中设置cookie?

当 javascript 加载时,它会发出另一个 ajax 请求,其中应在响应中设置 cookie。但是,Splash 不会在多个请求中保留任何 cookie,有没有办法在所有请求中保留 cookie?或者甚至在每个请求之间手动分配它们。

web-crawler scrapy scrapy-splash splash-js-render

3
推荐指数
1
解决办法
6700
查看次数

在 Scrapy 响应中执行内联 JavaScript

我正在尝试使用 Scrapy 登录网站,但收到的响应是仅包含内联 JavaScript 的 HTML 文档。JS 重定向到我想从中抓取数据的页面。但是 Scrapy 不执行 JS,因此不会路由到我想要的页面。

我使用以下代码提交所需的登录表单:

    def parse(self, response):
      request_id =   response.css('input[name="request_id"]::attr(value)').extract_first()
      data = {
          'userid_placeholder': self.login_user,
          'foilautofill': '',
          'password': self.login_pass,
          'request_id': request_id,
          'username': self.login_user[1:]
      }
      yield   scrapy.FormRequest(url='https://www1.up.ac.za/oam/server/auth_cred_submit',   formdata=data,
                               callback=self.print_p)
Run Code Online (Sandbox Code Playgroud)

print_p 回调函数如下:

def print_p(self, response):
    print(response.text)
Run Code Online (Sandbox Code Playgroud)

我看过scrapy-splash,但找不到在响应中使用scrapy-splash执行JS的方法。

javascript python scrapy scrapy-splash splash-js-render

3
推荐指数
1
解决办法
2657
查看次数

单击Scrapy-Splash中的按钮

我正在编写一个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
Run Code Online (Sandbox Code Playgroud)

网页快照 HTML代码

python scrapy scrapy-splash splash-js-render

3
推荐指数
1
解决办法
281
查看次数

Scrapy + Splash = 拒绝连接

我使用此链接安装了Splash。按照所有步骤进行安装,但 Splash 不起作用。

我的settings.py文件:

BOT_NAME = 'Teste'
SPIDER_MODULES = ['Test.spiders']
NEWSPIDER_MODULE = 'Test.spiders'
DOWNLOADER_MIDDLEWARES = {
     'scrapy_splash.SplashCookiesMiddleware': 723,
     'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,}
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
SPLASH_URL = 'http://127.0.0.1:8050/'
Run Code Online (Sandbox Code Playgroud)

当我运行时scrapy crawl TestSpider

[scrapy.core.engine] INFO: Spider opened
[scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
[scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET http://www.google.com.br via http://127.0.0.1:8050/render.html> (failed 1 times): Connection was refused by other side: 111: Connection refused.
[scrapy.downloadermiddlewares.retry] …
Run Code Online (Sandbox Code Playgroud)

web-crawler scrapy scrapy-splash splash-js-render

2
推荐指数
2
解决办法
2971
查看次数

尝试伪造和轮换用户代理

我正在尝试伪造用户代理并在 Python 中轮换它们。
我在网上找到了一个关于如何使用scrapy-useragents包使用 Scrapy 执行此操作的教程。
我抓取网页https://www.whatsmyua.info/,以检查我的用户代理,看看它是否与我的不同以及它是否旋转。它与我的实际用户代理不同吗,但它不会轮换,它每次都会返回相同的用户代理,而且我无法弄清楚出了什么问题。

设置.py

BOT_NAME = 'scrapy_javascript'

SPIDER_MODULES = ['scrapy_javascript.spiders']
NEWSPIDER_MODULE = 'scrapy_javascript.spiders'


# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'scrapy_javascript (+http://www.yourdomain.com)'

# Obey robots.txt rules
ROBOTSTXT_OBEY = True
DOWNLOADER_MIDDLEWARES = {
        'scrapy_splash.SplashCookiesMiddleware': 723,
        'scrapy_splash.SplashMiddleware': 725,
        'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# -----------------------------------------------------------------------------
# USER AGENT
# -----------------------------------------------------------------------------

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy_useragents.downloadermiddlewares.useragents.UserAgentsMiddleware': 500,
}


USER_AGENTS = [
    ('Mozilla/5.0 (X11; Linux x86_64) '
     'AppleWebKit/537.36 (KHTML, like …
Run Code Online (Sandbox Code Playgroud)

python user-agent scrapy scrapy-splash splash-js-render

2
推荐指数
1
解决办法
9853
查看次数

Splash 不会呈现页面的所有内容

我正在使用Splash v2.3.2 并且我正在尝试呈现一个页面,但它并没有呈现所有内容。它不会渲染图像或动态加载的内容。

我正在使用我的http://localhost:8050/脚本:

function main(splash)
  local url = splash.args.url
  assert(splash:go(url))
  assert(splash:wait(10))
  return {
    html = splash:html(),
    png = splash:png(),
    har = splash:har(),
  }
end
Run Code Online (Sandbox Code Playgroud)

这是浏览器渲染: 浏览器渲染

这是 Splash 渲染的屏幕截图: 飞溅渲染

我试图改变等待时间,也试图允许插件。这些都行不通。我假设动态加载的内容受到限制,但我不确定。任何帮助表示赞赏。

splash-screen scrapy-splash splash-js-render

1
推荐指数
1
解决办法
2005
查看次数

Scrapy Splash单击按钮不起作用

我想做什么

在avito.ru(俄罗斯房地产网站)上,隐藏人的电话,直到您单击它为止。我想使用Scrapy + Splash收集电话。

范例网址:https//www.avito.ru/moskva/kvartiry/2-k_kvartira_84_m_412_et._992361048

屏幕截图:电话被隐藏

单击按钮后,将显示弹出窗口,并且可以看到电话。

在此处输入图片说明

我使用带有以下Lua脚本的Splash execute API:

function main(splash)
    splash:go(splash.args.url)
    splash:wait(10)
    splash:runjs("document.getElementsByClassName('item-phone-button')[0].click()")
    splash:wait(10)
    return splash:png()
end
Run Code Online (Sandbox Code Playgroud)

问题

未单击该按钮,也不显示电话号码。这是一项微不足道的任务,我无法解释为什么它不起作用。

如果将替换item-phone-button为,则单击可以在同一页面上的其他字段上正常使用js-show-stat。因此,在一般情况下,Javascript 和蓝色的“显示电话”按钮必须具有某种特殊性。

我尝试过的

为了隔离问题,我创建了一个包含最少示例脚本的存储库和用于Splash的docker-compose文件:https : //github.com/alexanderlukanin13/splash-avito-phone

Javascript代码有效,您可以使用Chrome和Firefox中的Javascript控制台进行验证

document.getElementsByClassName('item-phone-button')[0].click()
Run Code Online (Sandbox Code Playgroud)

我已经在Splash 3.0、3.1、3.2版本中尝试过,结果是一样的。

更新资料

我也尝试过:

python scrapy splash-js-render

1
推荐指数
1
解决办法
3050
查看次数