6

我有几个网站,我想从以前的经验中提取数据,这并不像听起来那么容易。为什么?仅仅是因为我必须解析的 HTML 页面格式不正确(缺少结束标记等)。

考虑到我对我可以使用的技术、语言或工具没有任何限制,您对轻松解析和提取 HTML 页面中的数据有什么建议?我尝试过 HTML Agility Pack、BeautifulSoup,甚至这些工具都不是完美的(HTML Agility Pack 有问题,BeautifulSoup 解析引擎不适用于我传递给它的页面)。

4

6 回答 6

5

您可以使用几乎任何您喜欢的语言,只是不要尝试使用正则表达式解析 HTML。

所以让我换个说法说:你可以使用任何你喜欢的具有 HTML 解析器的语言,这几乎是过去 15 到 20 年发明的所有东西。

如果您遇到特定页面的问题,我建议您考虑使用HTML Tidy修复它们。

于 2009-02-24T14:26:40.393 回答
2

我认为 hpricot(由 Colin Pickard 链接)是王牌。将scrubyt添加到组合中,您将获得一个很棒的html抓取和浏览界面以及Ruby的文本匹配功能http://scrubyt.org/

这是来自http://github.com/scrubber/scrubyt_examples/blob/7a219b58a67138da046aa7c1e221988a9e96c30e/twitter.rb的一些示例代码

require 'rubygems'
require 'scrubyt'

# Simple exmaple for scraping basic
# information from a public Twitter
# account.

# Scrubyt.logger = Scrubyt::Logger.new

twitter_data = Scrubyt::Extractor.define do
  fetch 'http://www.twitter.com/scobleizer'

  profile_info '//ul[@class="about vcard entry-author"]' do
    full_name "//li//span[@class='fn']"
    location "//li//span[@class='adr']"
    website "//li//a[@class='url']/@href"
    bio "//li//span[@class='bio']"
  end
end

puts twitter_data.to_xml
于 2009-02-24T14:48:38.343 回答
2

作为语言 Java 和开源库,Jsoup将是一个非常适合您的解决方案。

于 2013-01-04T12:28:55.623 回答
0

hpricot可能是您正在寻找的。

于 2009-02-24T14:31:45.297 回答
0

你可以试试 PHP 的DOMDocument类。它有几种加载 HTML 内容的方法。我通常使用这个类。我的建议是在 HTML 中添加一个 DOCTYPE 元素以防它没有,并在 Firebug 中检查解析后产生的 HTML。在某些情况下,遇到无效标记时,DOMDocument 会对 HTML 元素进行一些重新排列。此外,如果有一个元标记指定源中的字符集,请注意它会在解析标记时被 libxml 内部使用。这是一个小例子

$html = file_get_contents('http://example.com');

$dom = new DOMDocument;
$oldValue = libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors($oldValue);

echo $dom->saveHTML();
于 2009-02-24T14:45:57.493 回答
0

任何在 DOM 级别上使用 HTML 的语言都是好的。

对于 perl,它是 HTML::TreeBuilder 模块。

于 2015-09-09T21:17:50.317 回答