Python 使用scrapy在splash浏览器中爬行时忽略某些链接

Python 使用scrapy在splash浏览器中爬行时忽略某些链接,python,scrapy,scrapy-splash,Python,Scrapy,Scrapy Splash,我正在使用splash和scrapy爬行JavaScript网站,这在以前工作正常,但现在他们更新了他们的网站,现在我的splash浏览器在下载后卡在“”页面上,并保持挂起状态,直到我们没有手动杀死它。关于这一点,请帮助我,或者有人可以告诉我,我们如何绕过此链接,这样它就不会卡在这里,并继续进行其他爬行。因此,有时一些网站会为蜘蛛和机器人设置一个名为蜜罐的防御。这些陷阱通常会把机器人送到他们无法逃脱的死胡同。在处理URL时,您希望使用正则表达式过滤出在对站点进行爬网时应豁免的URL,并且您可以在

我正在使用splash和scrapy爬行JavaScript网站,这在以前工作正常,但现在他们更新了他们的网站,现在我的splash浏览器在下载后卡在“”页面上,并保持挂起状态,直到我们没有手动杀死它。关于这一点,请帮助我,或者有人可以告诉我,我们如何绕过此链接,这样它就不会卡在这里,并继续进行其他爬行。

因此,有时一些网站会为蜘蛛和机器人设置一个名为蜜罐的防御。这些陷阱通常会把机器人送到他们无法逃脱的死胡同。在处理URL时,您希望使用正则表达式过滤出在对站点进行爬网时应豁免的URL,并且您可以在爬行器进入链接之前通过此检查传递所有URL,或者在爬行器与模式不一致时让爬行器通过此检查

import re

.....

pattern = re.compile(^www.[\w\d].(com|org|net|ng)$) #create a url pattern here, you will have to edit this to suit your needs
for url in urls:
    match = pattern.search(url)
    if not match:
        continue
    else:
       #perform normal crawling/scraping activities

这是绕过这些链接的一种方式。希望能有所帮助

以下是我如何避开splash和scrapy中的蜜罐链接。为此,我写了一个如下的脚本

splash:on_request(function(request)
    if string.match(request.url,'^%l+://%w+.example.com') or 
       string.match(request.url,'^%l+://%w+[^%w]+%a+.example.com') then
       request.abort()
    end
    if string.match(request.url,'error.js') then
       print("## get error while page rendering ###")
       request.abort()
    end
end)
在这里,如果该链接与特定模式(蜜罐链接)匹配,则上面的代码将删除该链接,或者在请求时获取error.js页面。
在splash中渲染时,第二个条件非常重要,因为如果您不处理此类js,则splash渲染引擎将挂起,并且永远不会让您重新控制

Hi@maestro.inc感谢您的回答,我明白我可以做这种事情,但唯一的问题是splash网络管理器并没有释放控制,所以我无法过滤这个链接。否则,你的答案是完美的。如果您知道如果发生类似错误,将强制splash前进,请提供帮助。就我个人而言,我通常只使用scrapy selenium第三方软件包,而不是splash(使用selenium感觉更舒适,并且证明它更灵活)唯一的缺点是,当我使用selenium第三方软件包时,首先进行设置可能会有点棘手,它的工作方式与典型的selenium软件包类似,我通常只是使用
driver.execute_脚本(f'windows.replace.location{'url i want to'})重定向回初始站点)
在超时或类似异常情况下,保持脚本从thereHi@maestro.inc运行,我已通过此链接“”使用scrapy设置selenium,并使用它爬网一些基本网站,但当我爬网angular网站(我要爬网)时然后它没有加载正确的网页。当我使用selenium web驱动程序并运行python代码时,我的网站没有正确加载,它正在加载……但在普通浏览器中它正在正确加载。这就是为什么我使用splash,因为这种沉重的网站需要时间加载。您能提供其他解决方案或一些建议吗???H您是否尝试过在headless模式下运行selenium,或者在使用scrapy splash时使用lua运行自定义JavaScript