标签: splash-js-render

Scrapy壳和Scrapy飞溅

我们一直在使用scrapy-splash中间件通过在Splashdocker容器内运行的javascript引擎传递已删除的HTML源代码.

如果我们想在spider中使用Splash,我们配置几个必需的项目设置并产生一个Request指定特定的meta参数:

yield Request(url, self.parse_result, meta={
    'splash': {
        'args': {
            # set rendering arguments here
            'html': 1,
            'png': 1,

            # 'url' is prefilled from request url
        },

        # optional parameters
        'endpoint': 'render.json',  # optional; default is render.json
        'splash_url': '<url>',      # overrides SPLASH_URL
        'slot_policy': scrapyjs.SlotPolicy.PER_DOMAIN,
    }
})
Run Code Online (Sandbox Code Playgroud)

这有助于记录.但是,我们如何scrapy-splashScrapy Shell中使用

scrapy web-scraping scrapy-shell scrapy-splash splash-js-render

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

在python Scrapy中执行SplashRequest时添加等待元素

我试图在python中使用Splash for Scrapy抓取一些动态网站.但是,我发现Splash无法等待在某些情况下加载整个页面.解决这个问题的一种强力方法是增加一个大的wait时间(例如,在下面的代码片段中为5秒).但是,这非常低效,仍然无法加载某些数据(有时加载内容需要超过5秒).是否存在可以通过这些请求进行某种等待的元素条件?

yield SplashRequest(
          url, 
          self.parse, 
          args={'wait': 5},
          'User-Agent':"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36",
          }
)
Run Code Online (Sandbox Code Playgroud)

python wait scrapy scrapy-splash splash-js-render

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

如何在scrapy-splash中设置启动超时?

我使用scrapy-splash来抓取网页,并在docker上运行splash服务.

commond:

docker run -p 8050:8050 scrapinghub/splash --max-timeout 3600
Run Code Online (Sandbox Code Playgroud)

但我得到了504错误.

"error": {"info": {"timeout": 30}, "description": "Timeout exceeded rendering page", "error": 504, "type": "GlobalTimeoutError"}
Run Code Online (Sandbox Code Playgroud)

虽然我尝试添加splash.resource_timeout,request:set_timeout或者SPLASH_URL = 'http://localhost:8050?timeout=1800.0'没有任何改变.

感谢帮助.

python scrapy scrapy-splash splash-js-render

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

Scrapy CrawlSpider + Splash:如何通过linkextractor关注链接?

我有以下代码部分工作,

class ThreadSpider(CrawlSpider):
    name = 'thread'
    allowed_domains = ['bbs.example.com']
    start_urls = ['http://bbs.example.com/diy']

    rules = (
        Rule(LinkExtractor(
            allow=(),
            restrict_xpaths=("//a[contains(text(), 'Next Page')]")
        ),
            callback='parse_item',
            process_request='start_requests',
            follow=True),
    )

def start_requests(self):
    for url in self.start_urls:
        yield SplashRequest(url, self.parse_item, args={'wait': 0.5})

def parse_item(self, response):
    # item parser
Run Code Online (Sandbox Code Playgroud)

代码只会运行start_urls但不会遵循指定的链接restricted_xpaths,如果我注释掉start_requests()方法和process_request='start_requests',规则中的行,它将运行并跟踪预期的链接,当然没有js渲染.

我已阅读了两个相关问题,CrawlSpider与飞溅卡住第一URL后CrawlSpider飞溅和专变scrapy.Request()SplashRequest()start_requests()方法,但似乎并没有工作.我的代码出了什么问题?谢谢,

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

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

飞溅容器在30分钟后停止工作

我有水族馆和飞溅的问题.他们在开始后30分钟后停止工作.加载的页数为50K-80K.我做了cron工作,每10分钟自动重启一次,每个Splash容器,但它不起作用我该如何解决?

这是截图 在此输入图像描述 来自HAProxy的统计数据 在此输入图像描述 这是Splash配置

splash0:
    image: scrapinghub/splash:3.0
    command: --max-timeout 3600 --slots 150 --maxrss 1000 --verbosity 5
    logging:
      driver: "none"
    expose:
        - 8050
    mem_limit: 1000m
    memswap_limit: 1000m
    restart: always
Run Code Online (Sandbox Code Playgroud)

和HAProxy

    backend splash-cluster
    option httpchk GET /
    balance leastconn

    # try another instance when connection is dropped
    retries 2
    option redispatch
    server splash-0 splash0:8050 check maxconn 150 inter 2s fall 10 observe layer4
backend splash-misc
    balance roundrobin
    server splash-0 splash0:8050 check fall 15
Run Code Online (Sandbox Code Playgroud)

更新1 这是重启的脚本

    #!/bin/sh

echo "BEGIN" >> restart.log
for index …
Run Code Online (Sandbox Code Playgroud)

haproxy docker splash-js-render

7
推荐指数
0
解决办法
477
查看次数

如何在OSX上安装python-gtk2,python-webkit和python-jswebkit

我已经阅读了许多相关问题,但仍然不清楚如何做到这一点,因为有许多可用的软件组合,许多解决方案似乎已经过时.

在OSX上的虚拟环境中安装以下内容的最佳方法是:

  • 蟒蛇-GTK2
  • 蟒蛇,WebKit的
  • 蟒蛇,jswebkit

我是否还必须安装GTK +和Webkit?如果是这样,怎么样?

还将欣赏关于这些软件如何协同工作的简单解释.

(我正在尝试使用需要这些库的scrapyjs)

python gtk webkit scrapy splash-js-render

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

使用docker,在Heroku上刮擦飞溅

我有一个使用splash的scrapy蜘蛛,该splash运行在Docker localhost:8050上以在渲染之前呈现JavaScript。我正在尝试在heroku上运行此程序,但不知道如何配置heroku以在运行我的Web之前启动docker运行闪屏:scrapy crawl abc dyno。非常感谢任何指导!

heroku scrapy docker splash-js-render

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

刮擦,飞溅,lua,按钮单击

我是这里所有乐器的新手。我的目标是从许多页面中提取所有URL,而这些页面通过“ Weiter” /“ next”按钮(多个URL)连接得更多。我决定尝试一下。该页面是动态生成的。然后,我得知我需要另一台仪器,并为此安装了Splash。安装正在运行。我根据教程设置了安装。然后,我通过在搜索输入字段中发送“返回”来设法获得第一页。使用可以给我所需结果的浏览器。我的问题是,我尝试单击生成的页面上的“下一个”按钮,但不知道具体如何。正如我在几页上所读到的那样,这并不总是那么容易。我尝试了建议的解决方案,但没有成功。我想我不太远,希望能有所帮助。谢谢。

我的settings.py

BOT_NAME = 'gr'
SPIDER_MODULES = ['gr.spiders']
NEWSPIDER_MODULE = 'gr.spiders'
ROBOTSTXT_OBEY = True
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPLASH_URL = 'http://localhost:8050'
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
Run Code Online (Sandbox Code Playgroud)

我的蜘蛛:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy_splash import SplashRequest
import json
# import base64

class GrSpider(scrapy.Spider):
    name = 'gr_'
    allowed_domains = ['lawsearch.gr.ch']
    start_urls = ['http://www.lawsearch.gr.ch/le/']

    def start_requests(self):

        script = """
        function …
Run Code Online (Sandbox Code Playgroud)

python lua scrapy scrapy-splash splash-js-render

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

启动lua脚本进行多次点击和访问

我正在尝试抓取Google Scholar搜索结果,并获取与搜索匹配的每个结果的所有BiBTeX格式。现在,我有一个带有Splash的Scrapy爬虫。我有一个lua脚本,它将在获取hrefBibTeX格式的引用之前单击“引用”链接并加载模式窗口。但是看到有多个搜索结果,因此有多个“引用”链接,我需要全部单击它们并加载各个BibTeX页面。

这是我所拥有的:

import scrapy
from scrapy_splash import SplashRequest


class CiteSpider(scrapy.Spider):
    name = "cite"
    allowed_domains = ["scholar.google.com", "scholar.google.ae"]
    start_urls = [
        'https://scholar.google.ae/scholar?q="thermodynamics"&hl=en'
    ]

    script = """
        function main(splash)
          local url = splash.args.url
          assert(splash:go(url))
          assert(splash:wait(0.5))
          splash:runjs('document.querySelectorAll("a.gs_nph[aria-controls=gs_cit]")[0].click()')
          splash:wait(3)
          local href = splash:evaljs('document.querySelectorAll(".gs_citi")[0].href')
          assert(splash:go(href))
          return {
            html = splash:html(),
            png = splash:png(),
            href=href,
          }
        end
        """

    def parse(self, response):
        yield SplashRequest(self.start_urls[0], self.parse_bib,
                            endpoint="execute",
                            args={"lua_source": self.script})

    def parse_bib(self, response):
        filename = response.url.split("/")[-2] + '.html'
        with open(filename, 'wb') as f:
            f.write(response.css("body …
Run Code Online (Sandbox Code Playgroud)

python scrapy scrapy-splash splash-js-render

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

Google App Engine:为Scrapy + Splash加载另一个Docker映像

我想在Google App Engine中使用Scrapy + Splash抓取一个javascript网站。Splash插件是Docker映像。有什么方法可以在Google App Engine中使用它吗?App Engine本身使用Docker映像,但是我不确定如何加载和访问辅助映像(使用Splash的方式)。这是Splash安装说明

google-app-engine scrapy docker scrapy-splash splash-js-render

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