Web scrapiof redoc web api

Web scraping redoc web api

我目前正在学习网络 抓取,我的任务之一是使用 API 使用 Redoc 的文档:OpenAPI/Swagger-generated API 参考文档: https://github.com/Redocly/redoc)

为了学习结构,我去了他们的 github 并点击了 live demo

我正在使用 Scrapy,这是我用来简单提取网站 HTML 的代码:

import scrapy

class QuoteSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://redocly.github.io/redoc/'
    ]

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = f'quotes-{page}.html'
        with open(filename, 'wb') as f:
            f.write(response.body)

问题是,在 scraper 运行 它的过程之后,如预期的那样创建了一个新文件,但是它缺少 HTML 的大部分(inside容器 div).

你们有没有遇到过这个问题,尤其是 redoc?如果是这样,你是如何解决的?你以为是这个文档生成器的配置不允许被抓取

谢谢!

Redoc 是一个 React 应用程序,这意味着实际的 HTML 正在 运行 时间内构建:

  • 首先是 skeleton of the page loads,它还会加载 redoc javascript
  • 然后 Redoc 下载 OpenAPI json(或 yaml)文件并根据它动态呈现实际的 HTML

这对于使用现代 JS 框架(vuejs、react、angular)构建的许多应用程序来说都是类似的。 要抓取这些,您必须在浏览器中实际加载页面以 运行 所有 javascript.

我相信现在最常用的方法是使用puppeteer (there is a python binding: https://github.com/pyppeteer/pyppeteer/)