我有几个网站,我想从以前的经验中提取数据,这并不像听起来那么容易。为什么?仅仅因为我必须解析的HTML页面没有正确格式化(缺少结束标记等)。
考虑到我对可以使用的技术,语言或工具没有任何限制,您有什么建议可以轻松地从HTML网页解析和提取数据?我已经尝试过HTML Agility Pack,BeautifulSoup,甚至这些工具也不完美(HTML Agility Pack有问题,而且BeautifulSoup解析引擎不适用于我传递给它的页面)。
谢谢!
答案 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可能就是您要找的。 p>
答案 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();