【问题标题】:How to scrape badly formed HTML如何抓取格式不正确的 HTML
【发布时间】:2014-03-23 04:29:11
【问题描述】:

我正在尝试抓取一个看起来很旧的页面,它看起来像是用 FrontPage 构建的,甚至只是从 Word 文档中粘贴的。它充满了可以在单词中间自发停止和开始的字体标签,或随机不同树深度的类似元素。

我不是在寻找任何可以解析糟糕 XML 的工具,我已经在使用 Html Agility Pack。当我说 HTML 格式不正确时,我的意思是它不是从数据库中输出的,没有任何一致的模式,但在屏幕上看起来还不错。

我可以使用哪些技术和工具?

【问题讨论】:

  • @happygilmore 你在用什么语言刮?如果您在浏览器中,则可以将编写不佳的 XML 设置为另一个元素的内容,并让浏览器将其理顺。如果您使用的是服务器端语言,您通常可以从源代码创建一个临时 DOM,然后对其进行爬网。
  • 您的问题与 HTML 无关,因为您已经解决了这个问题。你的问题是弄清楚如何从人类可读的东西中提取数据。

标签: html screen-scraping


【解决方案1】:

我会在 Nodejs 中使用 cheerio。它复制了与 jQuery 相同的 api,这使得解析格式错误的 html 变得非常容易。出于多种原因,使用 Javascript 进行抓取很有意义。

这是取自node.io的例子,

var request = require('request')
  , cheerio = require('cheerio')
  , async = require('async')
  , format = require('util').format;

var reddits = [ 'programming', 'javascript', 'node' ]
  , concurrency = 2;

async.eachLimit(reddits, concurrency, function (reddit, next) {
    var url = format('http://reddit.com/r/%s', reddit);
    request(url, function (err, response, body) {
        if (err) throw err;
        var $ = cheerio.load(body);
        $('a.title').each(function () {
            console.log('%s (%s)', $(this).text(), $(this).attr('href'));
        });
        next();
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2020-11-08
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多