class Program
{
static void Main(string[] args)
{
var web = new HtmlWeb();
var doc = web.Load("http://www.stackoverflow.com");
var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
foreach (var node in nodes)
{
Console.WriteLine(node.InnerHtml);
}
}
}
from BeautifulSoup import BeautifulSoup
html = "<html><body>"
for link in ("foo", "bar", "baz"):
html += '<a href="http://%s.com">%s</a>' % (link, link)
html += "</body></html>"
soup = BeautifulSoup(html)
links = soup.findAll('a', href=True) # find <a> with a defined href attribute
print links
use strict;
use warnings;
use pQuery;
my $html = join '',
"<html><body>",
(map { qq(<a href="http://$_.com">$_</a>) } qw/foo bar baz/),
"</body></html>";
pQuery( $html )->find( 'a' )->each(
sub {
my $at = $_->getAttribute( 'href' );
print "$at\n" if defined $at;
}
);
#!/usr/bin/python
from HTMLParser import HTMLParser
class FindLinks(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
def handle_starttag(self, tag, attrs):
at = dict(attrs)
if tag == 'a' and 'href' in at:
print at['href']
find = FindLinks()
html = "<html><body>"
for link in ("foo", "bar", "baz"):
html += '<a href="http://%s.com">%s</a>' % (link, link)
html += "</body></html>"
find.feed(html)
#!/usr/bin/perl
use strict;
use warnings;
use Encode ':all';
use LWP::Simple;
use XML::Twig;
#my $url = 'http://stackoverflow.com/questions/773340/can-you-provide-an-example-of-parsing-html-with-your-favorite-parser';
my $url = 'http://www.google.com';
my $content = get($url);
die "Couldn't fetch!" unless defined $content;
my $twig = XML::Twig->new();
$twig->parse_html($content);
my @hrefs = map {
$_->att('href');
} $twig->get_xpath('//*[@href]');
print "$_\n" for @hrefs;
import lxml.html
html = "<html><body>"
for link in ("foo", "bar", "baz"):
html += '<a href="http://%s.com">%s</a>' % (link, link)
html += "</body></html>"
tree = lxml.html.document_fromstring(html)
for element, attribute, link, pos in tree.iterlinks():
if attribute == "href":
print link
lxml还有一个用于遍历DOM的CSS选择器类,可以使它与使用JQuery非常相似:
for a in tree.cssselect('a[href]'):
print a.get('href')
use strict;
use HTML::TreeBuilder;
use LWP::Simple;
my $content = get 'http://www.stackoverflow.com';
my $document = HTML::TreeBuilder->new->parse($content)->eof;
for my $a ($document->find('a')) {
print $a->attr('href'), "\n" if $a->attr('href');
}
#!/usr/bin/env ruby
require "nokogiri"
require "open-uri"
doc = Nokogiri::HTML(open('http://nokogiri.org'))
hrefs = doc.search('a[href]').map{ |n| n['href'] }
puts hrefs
.each_with_index # add an array index
.minmax{ |a,b| a.last <=> b.last } # find the first and last element
.map{ |h,i| '%3d %s' % [1 + i, h ] } # format the output
1 http://github.com/tenderlove/nokogiri
100 http://yokolet.blogspot.com
var page = new WebPage(),
url = 'http://www.udacity.com';
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
var results = page.evaluate(function() {
var list = document.querySelectorAll('a'), links = [], i;
for (i = 0; i < list.length; i++) {
links.push(list[i].href);
}
return links;
});
console.log(results.join('\n'));
}
phantom.exit();
});
<cfscript>
function parseURL(required string url){
var res = [];
var javaLoader = createObject("javaloader.JavaLoader").init([expandPath("./jsoup-1.7.3.jar")]);
var jSoupClass = javaLoader.create("org.jsoup.Jsoup");
//var dom = jSoupClass.parse(html); // if you already have some html to parse.
var dom = jSoupClass.connect( arguments.url ).get();
var links = dom.select("a");
for(var a=1;a LT arrayLen(links);a++){
var s={};s.href= links[a].attr('href'); s.text= links[a].text();
if(s.href contains "http://" || s.href contains "https://") arrayAppend(res,s);
}
return res;
}
//writeoutput(writedump(parseURL(url)));
</cfscript>
<cfdump var="#parseURL("http://stackoverflow.com/questions/773340/can-you-provide-examples-of-parsing-html")#">
29 回答
语言:JavaScript
图书馆:jQuery
(使用firebug console.debug输出...)
并加载任何HTML页面:
对于这个函数使用了另一个函数,我认为在链接方法时它更清晰 .
语言:C#
图书馆:HtmlAgilityPack
语言:Python
图书馆:BeautifulSoup
输出:
也有可能:
输出:
语言:Perl
图书馆:pQuery
语言:shell
library:lynx(好吧,它不是库,但在shell中,每个程序都是类库)
语言:Ruby
图书馆:Hpricot
语言:Python
图书馆:HTMLParser
语言:Perl
图书馆:HTML::Parser
语言:JavaScript
图书馆:DOM
(使用firebug console.debug输出...)
语言Perl
图书馆:HTML::LinkExtor
Perl的美妙之处在于,您拥有适用于特定任务的模块 . 像链接提取 .
整个计划:
说明:
use strict - 打开"strict"模式 - 简化了潜在的调试,与示例不完全相关
使用HTML :: LinkExtor - 加载有趣的模块
使用LWP :: Simple - 只是获取一些html进行测试的简单方法
my $ url ='http://www.google.com/' - 我们将从哪个页面中提取网址
my $ content = get($ url) - 获取页面html
my $ p = HTML :: LinkExtor-> new(\&process_link,$ url) - 创建LinkExtor对象,为每个url上将用作回调的函数提供引用,并将$ url用作相对URL的BASEURL
$ p-> parse($ content) - 我猜很明显
退出 - 程序结束
sub process_link - 函数process_link的开头
my($ tag,%attr) - 获取参数,它们是标记名称及其属性
返回除非$ tag eq 'a' - 如果标签不是<a>则跳过处理
返回除非被拒绝$ attr {'href'} - 如果<a>标签没有href属性,则跳过处理
print "- $attr{'href'}\n"; - 很明显我猜:)
返回; - 完成功能
就这样 .
语言:Ruby
图书馆:Nokogiri
语言:Common Lisp
图书馆:Closure Html,Closure Xml,CL-WHO
(使用DOM API显示,不使用XPATH或STP API)
语言:Clojure
库:Enlive(基于选择器(àlaCSS)的Clojure模板和转换系统)
选择器表达式:
现在我们可以在REPL上执行以下操作(我在
test-select
中添加了换行符):您需要以下内容才能尝试:
前言:
测试HTML:
语言:Perl
图书馆:XML::Twig
警告:可以使用像这样的页面获得宽字符错误(将URL更改为注释掉的将会出现此错误),但上面的HTML :: Parser解决方案不会共享此问题 .
语言:Perl
图书馆:HTML::Parser
目的:How can I remove unused, nested HTML span tags with a Perl regex?
语言:Java
图书馆:XOM,TagSoup
我在此示例中包含了故意格式错误且不一致的XML .
默认情况下,TagSoup将引用XHTML的XML命名空间添加到文档中 . 我选择在这个样本中压制它 . 使用默认行为需要调用
root.query
以包含如下命名空间:语言:C#
库:System.XML(标准.NET)
语言:Racket
图书馆:(planet ashinn/html-parser:1)和(planet clements/sxml2:1)
以上示例使用新软件包系统中的软件包:html-parsing和sxml
注意:从命令行使用'raco'安装所需的软件包,包括:
和:
语言:Python
图书馆:lxml.html
lxml还有一个用于遍历DOM的CSS选择器类,可以使它与使用JQuery非常相似:
语言:PHP
图书馆:SimpleXML(和DOM)
语言:Objective-C
图书馆:libxml2 Matt Gallagher's libxml2 wrappers Ben Copsey's ASIHTTPRequest
语言:Perl
图书馆:HTML::TreeBuilder
语言:Python
图书馆:HTQL
简单直观 .
语言:Ruby
图书馆:Nokogiri
哪个输出:
这是上面的一个小调整,导致输出可用于报告 . 我只返回hrefs列表中的第一个和最后一个元素:
语言:Java
图书馆:jsoup
语言:PHP库:DOM
有时在
$doc->loadHTMLFile
之前放置@
符号来抑制无效的html解析警告是有用的使用phantomjs,将此文件另存为extract-links.js:
跑:
语言:Coldfusion 9.0.1
图书馆:jSoup
返回结构数组,每个结构包含一个HREF和TEXT对象 .
语言:JavaScript / Node.js
图书馆:Request和Cheerio
请求库下载html文档,Cheerio允许您使用jquery css选择器来定位html文档 .