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/)
我目前正在学习网络 抓取,我的任务之一是使用 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/)