我最近不得不创建一个所有部门使用的SAP tiles的列表。所以我以一种无聊的方式访问了https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/,这是找到你想要使用的应用程序的tile的主要来源。 因为这是一个有点长,缓慢和不愉快的方式来做,我试图使用Scrapy,我可以用来报废的网页数据。 当我用浏览器访问页面和搜索应用程序时,我可以复制和过去我想要的每个应用程序的这些信息。当用Chrome检查网站时,我可以看到包含我需要的数据的HTML部分。使用Scrapy并让它通过更改URL来搜索数据根本不起作用。每次我废弃一个站点时,都会抓取开始页面而不是我想要的页面。 是否有人遇到过类似的问题,或者知道如何“等待”合适的站点出现? 问题来源StackOverflow 地址:/questions/59380362/extract-tile-name-from-sap-firoi-apps-library-with-scrapy
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Scrapy抓取动态加载内容时,你可能需要模拟实际的浏览行为,因为很多现代网站(如SAP Fiori应用库)依赖于JavaScript来动态加载数据。Scrapy默认不执行JavaScript,因此直接请求URL可能无法获取到通过Ajax或其他异步方式加载的内容。
为了解决这个问题,你可以采用以下几种方法:
使用Splash与Scrapy集成: Splash是一个基于Lua脚本的轻量级浏览器渲染服务,可以用来渲染JavaScript页面。你可以将它与Scrapy一起使用,以抓取动态内容。首先,你需要安装并运行Splash服务器,然后使用scrapy-splash
中间件。具体步骤如下:
scrapy-splash
:pip install scrapy-splash
yield SplashRequest
代替普通的yield Request
,并指定一个Lua脚本来控制页面的加载和交互。使用Selenium或WebDriver: Selenium是一个自动化测试工具,可以驱动真实的浏览器(如Chrome、Firefox等),非常适合处理需要JavaScript渲染的页面。虽然Selenium比纯Scrapy慢得多,但它能提供更高级的交互能力。你可以结合Scrapy使用Selenium,或者考虑使用像scrapy-webdriver
这样的库来简化集成。
分析API请求: 很多时候,动态加载的数据实际上是通过Ajax请求从后端获取的。使用开发者工具的网络面板观察这些请求,尝试直接请求这些API接口来获取数据,这通常比渲染整个页面更高效。如果SAP Fiori应用库有公开的API或者你可以逆向工程出请求参数,这可能是最理想的解决方案。
等待页面加载完成: 如果确定页面是静态的,只是加载速度慢,你可以在Scrapy中增加下载延迟(DOWNLOAD_DELAY
),但这对动态加载的内容帮助不大,因为问题在于JavaScript未被执行。
针对你的特定问题,我建议首先检查Fiori应用库是否有公开的API可以直接调用,这是最直接且高效的方法。如果没有,尝试使用Splash或Selenium来处理JavaScript渲染的问题。