开发者社区 问答 正文

用Scrapy从SAP Firoi应用程序库中提取tile名称

我最近不得不创建一个所有部门使用的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

展开
收起
kun坤 2019-12-28 14:23:02 553 分享 版权
阿里云 AI 助理回答

在使用Scrapy抓取动态加载内容时,你可能需要模拟实际的浏览行为,因为很多现代网站(如SAP Fiori应用库)依赖于JavaScript来动态加载数据。Scrapy默认不执行JavaScript,因此直接请求URL可能无法获取到通过Ajax或其他异步方式加载的内容。

为了解决这个问题,你可以采用以下几种方法:

  1. 使用Splash与Scrapy集成: Splash是一个基于Lua脚本的轻量级浏览器渲染服务,可以用来渲染JavaScript页面。你可以将它与Scrapy一起使用,以抓取动态内容。首先,你需要安装并运行Splash服务器,然后使用scrapy-splash中间件。具体步骤如下:

    • 安装scrapy-splashpip install scrapy-splash
    • 配置Scrapy项目中的设置文件,添加Splash的URL和中间件。
    • 在爬虫中使用yield SplashRequest代替普通的yield Request,并指定一个Lua脚本来控制页面的加载和交互。
  2. 使用Selenium或WebDriver: Selenium是一个自动化测试工具,可以驱动真实的浏览器(如Chrome、Firefox等),非常适合处理需要JavaScript渲染的页面。虽然Selenium比纯Scrapy慢得多,但它能提供更高级的交互能力。你可以结合Scrapy使用Selenium,或者考虑使用像scrapy-webdriver这样的库来简化集成。

  3. 分析API请求: 很多时候,动态加载的数据实际上是通过Ajax请求从后端获取的。使用开发者工具的网络面板观察这些请求,尝试直接请求这些API接口来获取数据,这通常比渲染整个页面更高效。如果SAP Fiori应用库有公开的API或者你可以逆向工程出请求参数,这可能是最理想的解决方案。

  4. 等待页面加载完成: 如果确定页面是静态的,只是加载速度慢,你可以在Scrapy中增加下载延迟(DOWNLOAD_DELAY),但这对动态加载的内容帮助不大,因为问题在于JavaScript未被执行。

针对你的特定问题,我建议首先检查Fiori应用库是否有公开的API可以直接调用,这是最直接且高效的方法。如果没有,尝试使用Splash或Selenium来处理JavaScript渲染的问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: