如何使用各种语言解析HTML并解析库?
回答时:
个人评论将链接到有关如何使用正则表达式解析HTML的问题的答案,作为展示正确行事方式的一种方式.
为了保持一致性,我要求该示例解析hrefin锚标记的HTML文件.为了便于搜索此问题,我要求您遵循此格式
语言:[语言名称]
图书馆:[图书馆名称]
[example code]
Run Code Online (Sandbox Code Playgroud)
请使库成为库文档的链接.如果您想提供除提取链接之外的示例,还请包括:
目的:[解析的作用]
这是交易.有没有办法让基于多个正则表达式的行中的字符串标记?
一个例子:
我必须根据不同的正则表达式获取所有href标签,相应的文本和其他一些文本.所以我有3个表达式,并且想要对行进行标记并提取与每个表达式匹配的文本标记.
我实际上是使用flex完成的(不要与Adobe混淆),这是一个很好的老lex的实现.lex通过基于表达式执行"actions"来提供一种优雅的方法.人们也可以控制lex读取文件的方式(基于块/行的读取).
问题是flex实际上产生的C/C++代码实际上是标记化工作.我有一个包含所有这些东西的make文件.我想知道perl/python是否能以某种方式做同样的事情.它只是我想用一种编程语言本身做我喜欢的一切.
令牌化只是我想要在我的应用程序中执行的操作之一.
除了perl或python之外,任何语言(功能也可以)都可以这样做吗?
我在这里读过关于PLY和ANTLR的内容(解析,我在哪里可以了解它).
但有没有办法在python本身自然地做到这一点?请原谅我的无知,但这些工具是否适用于任何受欢迎的产品/服务?
谢谢.
我有一个类似wget的脚本,它下载一个页面,然后检索该页面上IMG标签中链接的所有文件.
给定原始页面的URL和从该页面中的IMG标记中提取的链接,我需要构建我想要检索的图像文件的URL.目前我使用的是我写的函数:
sub build_url {
my ( $base, $path ) = @_;
# if the path is absolute just prepend the domain to it
if ($path =~ /^\//) {
($base) = $base =~ /^(?:http:\/\/)?(\w+(?:\.\w+)+)/;
return "$base$path";
}
my @base = split '/', $base;
my @path = split '/', $path;
# remove a trailing filename
pop @base if $base =~ /[[:alnum:]]+\/[\w\d]+\.[\w]+$/;
# check for relative paths
my $relcount = $path =~ /(\.\.\/)/g;
while ( $relcount-- ) {
pop @base; …Run Code Online (Sandbox Code Playgroud) 字符串:"这是徽章,https: //stackoverflow.com/badges bla bla bla"
如果string contatins一个链接(见上文)我想解析该链接的网站标题.
它应该返回:徽章 - 堆栈溢出.
我怎样才能做到这一点?
谢谢.
我是Perl的新手并且正在玩屏幕抓取和正则表达式.我正在尝试提取以下HTML块的"标题"名称:
... title="The Valley Downs Chicago"><img class="vimg120" ...
Run Code Online (Sandbox Code Playgroud)
我这样做的简单Perl代码是:
@htmlBlocks = split ("margin-bottom:20px",$content);
foreach $item (@htmlBlocks)
{
if (/\stitle="([^"]*)"/six)
{
print $1;
}
}
Run Code Online (Sandbox Code Playgroud)
但它不会打印任何东西.虽然我正在排除故障,但我会问专家你是否看到任何错误或可能有问题.非常感谢您的帮助!
我正在尝试在另一个答案中找到的东西,但我遇到了一些问题:
我知道URL有更好的正则表达式,但请考虑这个例子:
@links=($content =~ m/(https?)?.*[.]com/g);
*$content has text or html
Run Code Online (Sandbox Code Playgroud)
该部分(https?)?是像链接www.google.com,但有括号它返回"http"到$1其投入@links!这是一个问题,因为我想要整个链接.
什么会从文本中全局提取简单链接(或指定任何正则表达式)并将它们放入列表中?
简单来说,我的意思是:
http://www.google.comwww.google.comgoogle.comhttps://www.google.com