【问题标题】:Web scraping redoc web api网页抓取 redoc web api
【发布时间】:2021-09-25 21:46:12
【问题描述】:

我目前正在学习网络抓取,我的任务之一是使用使用 Redoc:OpenAPI/Swagger 生成的 API 参考文档的 API 文档:@ 987654321@)

为了学习结构,我去了他们的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)

问题是,在刮板运行后,如预期的那样创建了一个新文件,但是它缺少大部分 HTML(在容器 div 内)。

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

谢谢!

【问题讨论】:

  • 仅供参考,它是刮擦而不是刮擦或报废
  • “我不接受任何答案”是什么意思?正如我没有将任何标记为正确? (老实说,我认为 stackoverflow 是根据投票系统自动完成的)

标签: python html web-scraping scrapy documentation


【解决方案1】:

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

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

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

我相信现在最常用的方法是使用puppeteer(有一个python绑定:https://github.com/pyppeteer/pyppeteer/

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2021-12-19
    • 2019-01-18
    相关资源
    最近更新 更多