【问题标题】:Web-scraping a website which uses javascript [closed]网页抓取使用 javascript 的网站 [关闭]
【发布时间】:2013-07-01 18:53:43
【问题描述】:

我会尽量保持简短;我正试图从这个网站上抓取信息:http://eu.battle.net/wow/en/character/uldaman/Dus/statistic#21:152

该列表包括一个项目“最高 2 人个人评分”,后跟一个数字。这个号码就是我要找的。具体存储在哪里,如何获取?

提前致谢。

【问题讨论】:

  • 可怕的问题。你试过什么了?你是如何获取数据的?你使用什么编程语言?您在javascript 中标记的唯一一个。那是你在写的吗?你在哪里运行它? Windows 脚本主机?节点.js?还有什么?

标签: javascript jquery html web-scraping


【解决方案1】:

我正在考虑您正在使用 jQuery:

$('#cat-152 dt').filter(function() { return $(this).text() == "Highest 2 man personal rating" }).siblings('dd').text()

【讨论】:

  • 没有评论就投反对票是蹩脚的..
  • 你为什么认为 OP 是“使用 jQuery”? javascript 标签表示除非还包含框架/库的标签,否则需要纯 JavaScript 答案。这也假设 OP 已经构建了一个系统来获取页面,从中生成 DOM 并执行附加到页面的 JS(并且问题中没有证据)。
  • 除非您是页面源的所有者,否则这将不起作用,跨脚本安全将被阻止。
【解决方案2】:
var http = require('http');
var options = {
    host: 'eu.battle.net',
    path: '/wow/en/character/uldaman/Dus/statistic/152'
};

var count = 0;

http.get(options, function(res) {

    var data = "";

    res.on('data', function (chunk) {
        data += chunk;
    });

    res.on('end', function(){
       var d = data;
       var payload = d.toString();
       var finder = "<dt>Highest 2 man team rating</dt><dd>";
       var indexOfHighest2Man = payload.indexOf(finder);
       var indexOfClosingDD = payload.indexOf("</dd>", indexOfHighest2Man);

       var count = payload.substr(indexOfHighest2Man,  indexOfClosingDD - indexOfHighest2Man);
       count = count.replace(/\s/g, "");
       count = count.replace("<dt>Highest2manteamrating</dt><dd>", "");

       //***************** Here is the answer *******************
       console.log('Highest 2 man rating ',count);
       //********************************************************
    })


}).on('error', function(e) {
        console.log('ERROR: ' + e.message);
    });

【讨论】:

  • 这是一个 node.js 爬虫,运行它。它有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2012-07-27
  • 1970-01-01
  • 2018-02-22
  • 2015-12-12
  • 1970-01-01
相关资源
最近更新 更多