首页 > 解决方案 > Scrapy-Splash 停止响应某些链接

问题描述

大家好,我正在做一个抓取项目,我正在抓取一个有角度的网站。对于这个任务,我使用了 scrapy 和 splash。几天前,scraper 运行得非常好,但现在对于某些链接它无法正常工作。它打开用户的时间线,但无法为所有用户打开视频页面(在此之前工作正常)。我没有收到任何错误,但是当请求用户的视频页面时,飞溅变得无响应。我给出了足够的时间延迟,大约是 72000 秒。使用 Splash 3.4 的版本:最新的 docker image scrapy 1.7.3 python 3

编辑 大家好,今天我观察到更多关于我的启动挂起问题,我认为网站已经编写了一些 JavaScript 代码来检测它是来自正确浏览器还是来自启动的请求。因为当我在浏览器中打开链接(' https://www.example.com/@user/video/6767235575733947649 ')时,它工作正常,但是在使用默认标题的初始浏览器中打开时,它会将我重定向到' https://s16. examplecdn.com/example/falcon/_next/static/1.0.1.309/pages/_error.js '然后飞溅挂起并抛出 continue sly 2019-12-11 07:33:43.712428 [render] JsConsole( https:// /s16.examplecdn.com/example/falcon/_next/static/chunks/commons.787eed06a7e37b82e3d0.js:1): TypeError: undefined is not an object (evalating 'h.$languageList') 所以,我认为这可以帮助你们改进飞溅,希望你们能帮助我解决这个问题。

标签: pythonscrapyweb-crawlerscrapy-splashsplash-js-render

解决方案


这里 splash 停止响应,因为它在响应中获取 error.js 页面,并且在渲染时会挂起。所以在调试和阅读文档之后。我编写了 lua 脚本来避免挂起的飞溅。

splash:on_request(function(request)
    if string.match(request.url,'error.js') then
       print("## get error while page rendering ###")
       request.abort()
    end
end)

推荐阅读