我应该使用什么语言/工具进行HTML解析?

时间:2009-02-24 14:25:14

标签: html screen-scraping html-parsing

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

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

谢谢!

5 个答案:

答案 0 :(得分:5)

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

所以让我重新说一下并说:你可以使用任何你喜欢的语言,它有一个HTML解析器,这几乎是过去15到20年间发明的所有东西。

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

答案 1 :(得分:3)

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

答案 2 :(得分: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

答案 3 :(得分:0)

hpricot可能就是您要找的。

答案 4 :(得分:0)

您可以尝试PHP的DOMDocument课程。它有几种加载HTML内容的方法。我通常会使用这个课程。我建议将一个DOCTYPE元素添加到HTML中,以防它没有,并在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();