【问题标题】:Axios blocked by CORS but HTMLParser isn't? (Web Browser Scraper)Axios 被 CORS 阻止但 HTMLParser 不是? (网络浏览器抓取工具)
【发布时间】:2021-09-25 21:45:31
【问题描述】:

我有一个使用 HTMLParser 模块的 Python 网络爬虫。它报废的网站是http://consulta.siiau.udg.mx/wco/sspseca.consulta_oferta?ciclop=202120&cup=D&mostrarp=100000&ordenp=2

现在我需要做同样的事情,但 基于 Web 浏览器 使用 javascript,所以我尝试使用 axios 获取原始 HTML,但我不断收到 '对 XMLHttpRequest 的访问已被 CORS 策略阻止'.

我试过的是

axios.post('http://consulta.siiau.udg.mx/wco/sspseca.consulta_oferta', {
        ciclop: '202120',
        cup: 'D',
        mostrarp: 10000,
        ordennp: 2,
      })
      .then((response) => {
        console.log(response)
      })

axios.get('http://consulta.siiau.udg.mx/wco/sspseca.consulta_oferta?ciclop=202120&cup=D&mostrarp=100000&ordenp=2',
        { crossdomain: true }
      )
      .then((response) => {
        console.log(response)
      })

我知道在 javascript 中他们通常使用像 Puppeteer 内部的无头浏览器,但由于这个项目是一个网站 我不能使用 Node.js 模块。

目前我实现的解决方案是让服务器运行 Flask API 来处理 html 获取,然后将其发送回客户端进行处理,但如果客户端可以这样做,这将减轻我的服务器性能在他身边。

【问题讨论】:

  • 如果你被 cors 拒绝,那么你的 api 中是否需要允许外部 cors
  • CORS 由浏览器强制执行。 Python 不是浏览器。
  • @Eloi 不,我的 API 只是从 Consulta.siiau.udg.mx 获取 html 数据的一种解决方法。客户端和我的 API 以及我的 API 和 Consulta.siiau.udg.mx 之间都没有 CORS 问题。
  • @tevemadar 我明白了,但是如果 Puppeteer 使用无头浏览器,为什么它不会被 CORS 阻止?我刚刚在try-puppeteer.appspot.com进行了测试
  • 因为 Puppeteer 不在浏览器中运行(就像这里的 JavaScript 代码),所以它控制着一个浏览器。浏览器正在浏览给定的页面。但是现在你有了基于浏览器的 JavaScript,所以浏览器正在浏览你的页面,并试图从另一个站点获取数据——这就是 CORS 的“领域”。一个简单的解决方法是与您的页面(Python、PHP、节点等)共同托管一些服务器端代码,这些代码代理您的页面所需的任何外部数据。但这是以在服务器上运行活动代码为代价的。

标签: javascript python web-scraping


【解决方案1】:

简而言之,您不能使用 fetch API 或 XMLHTTPRequest 访问浏览器跨域策略不允许的资源。

出于安全原因,浏览器会限制从脚本发起的 HTTP 请求。 Web 应用程序只能从加载应用程序的同一源请求资源,除非来自其他源的响应包含正确的 CORS 标头。

您可以使用无头浏览器(puppeteer)访问网页,例如使用:

 await page.goto('https://example.com');

这相当于将http://example.com 放在浏览器栏中并按ENTER。该页面上的任何脚本都受到与以前相同的跨域限制。但是,告诉浏览器访问http://example.com 本身并不是跨域请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2021-10-25
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多