【问题标题】:Javascript to get gross for single movie from boxofficemojo.com从 boxofficemojo.com 获取单部电影的 Javascript
【发布时间】:2017-11-12 11:28:27
【问题描述】:

boxofficemojo.com 在这里有一个页面:

http://www.boxofficemojo.com/about/data.htm

讨论他们的数据馈送。我正在尝试获取给定电影的票房号码,以便在我的代码中做其他事情。对于单个电影,boxofficemojo.com 提供如下方法(以星球大战3为例):

http://www.boxofficemojo.com/data/js/moviegross.php?id=starwars3.htm&shortgross=0

在 javascript(使用或不使用 jQuery)中,如何在变量中获取“$380,270,577”?我会遇到 CORS 问题吗?

我已经尝试了一些方法,例如 $.getJSON(URL)、$.ajax,但我似乎遇到了一个 CORS 错误,所以我什至无法通过这些方法来查看这些方法是否可行我需要的。我是不是把事情复杂化了? javascript 中是否有一种简单的方法来获取该值?

【问题讨论】:

    标签: javascript html web-scraping cors


    【解决方案1】:

    您可以通过代理发出请求来绕过 CORS 错误;尝试更改您现有的前端 JavaScript 代码以使用此 URL:

    https://cors-anywhere.herokuapp.com/http://www.boxofficemojo.com/data/js/moviegross.php?id=starwars3.htm&shortgross=0
    

    通过代理发送请求,该代理将 Access-Control-Allow-Origin 响应标头添加到它,然后将其作为响应传递回您的请求前端代码。

    带有Access-Control-Allow-Origin 响应标头的响应是浏览器看到的,因此浏览器允许您的前端 JavaScript 代码实际访问响应。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 有更多详细信息。


    至于在收到响应后提取“$380,270,577”,您可以使用正则表达式匹配:

    var s = `document.write('<style type="text/css"><!-- td.mojo_copyright { text-align: center; background-color: #000000; font-size: 7pt; font-family: arial; } a.mojocopyra:link, a.mojocopyra:visited, a.mojocopyra:active { color: #ffffff; font-size: 7pt; font-family: arial; } a.mojocopyra:hover { color: #ffffff; font-size: 7pt; font-family: arial; text-decoration: underline; background: none } ');
    
        document.write('td.mojo_header { text-align: center; background-color: #8b0000; font-size: 9pt; font-family: verdana; font-weight: bold; color: #ffffff } ');
    
        document.write('td.mojo_row { background-color: #ffffff; font-size: 9pt; font-family: verdana; color: #000000 } ');
    
    document.write('--></style>');
    document.write('<table border=0 cellspacing=1 cellpadding=3>');
    document.write('<tr><td align=center class=mojo_header>Revenge of the Sith</td></tr>');
    document.write('<tr><td align=center class=mojo_row><b>$380,270,577</b></td></tr>');
    document.write('<tr><td class=mojo_copyright><a class=mojocopyra href=http://www.boxofficemojo.com/movies/?id=starwars3.htm><nobr>Source: Box Office Mojo.</nobr> <nobr>Click for more info.</nobr></a></tr>');
    document.write('</table>');`
    
    var r = /mojo_row><b>([^<]+)</; // match "…class=mojo_row><b>$380,270,577</b>…"
    
    var gross = r.exec(s)[1]; // grab just "$380,270,577" from ([^<]+) matching group
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      相关资源
      最近更新 更多