正则表达式从html页面提取数据
我想从 html 页面中提取所有锚标记。我在 Linux 中使用这个。
lynx --source http://www.imdb.com | egrep "<a[^>]*>"
但这并没有按预期工作,因为结果包含不需要的结果,
<a class="amazon-affiliate-site-name" href="http://www.fabric.com">Fabric</a><br>
我想要
<a href >...</a>
什么好方法吗?
I want to extract all anchor tags from html pages. I am using this in Linux.
lynx --source http://www.imdb.com | egrep "<a[^>]*>"
but that is not working as expected, since result contains unwanted results
<a class="amazon-affiliate-site-name" href="http://www.fabric.com">Fabric</a><br>
I want just
<a href >...</a>
any good way ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您的 grep 中有一个
-P
选项,以便它接受 PCRE 模式,您应该能够使用更好的正则表达式。有时像*?
这样的最小量词会有所帮助。此外,您将获得整个输入行,而不仅仅是匹配本身;如果 grep 有-o
选项,它将仅列出匹配的部分。如果您的 grep 没有这些选项,请尝试
Which now crosses line borders。
要对 HTML 进行真正的解析,需要的正则表达式比您在命令行中输入的要复杂得多。 这是一个示例,以及这是另一个。这些可能无法说服您尝试非正则表达式方法,但它们至少应该向您展示在一般情况下比在特定情况下困难得多。
这个答案说明了为什么所有事情都是可能的,但并非所有事情都是有利的。< /a>
If you have a
-P
option in your grep so that it accepts PCRE patterns, you should be able to use better regexes. Sometimes a minimal quantifier like*?
helps. Also, you’re getting the whole input line, not just the match itself; if you have a-o
option to grep, it will list only the part that matches.If your grep doesn’t have those options, try
Which now crosses line boundaries.
To do a real parse of HTML requires regexes subtantially more more complex than you are apt to wish to enter on the command line. Here’s one example, and here’s another. Those may not convince you to try a non-regex approach, but they should at least show you how much harder it is in the general case than in specific ones.
This answer shows why all things are possible, but not all are expedient.
为什么不能使用像
--dump
这样的选项?why can't you use options like
--dump
?尝试
grep -Eo
:但请阅读 MAK 链接到的答案。
Try
grep -Eo
:But please read the answer that MAK linked to.
以下是一些为什么不应该使用正则表达式来解析 html 的示例。
要提取锚标记的
'href'
属性值,请运行:如果需要,安装
lxml
模块:$ sudo apt-get install python-lxml
。输出
Here's some examples of why you should not use regex to parse html.
To extract values of
'href'
attribute of anchor tags, run:Install
lxml
module if needed:$ sudo apt-get install python-lxml
.Output
要提取锚标记的“href”属性值,您还可以在使用 HTML Tidy(2009 年 3 月 25 日发布的 Mac OS X 版本)将 HTML 转换为 XHTML 后使用 xmlstarlet:
To extract values of 'href' attribute of anchor tags you may also use xmlstarlet after converting HTML to XHTML using HTML Tidy (Mac OS X version released on 25 March 2009):
在 Mac OS X 上,您还可以使用命令行工具 linkscraper:
请参阅:http://codesnippets.joyent .com/posts/show/10772
On Mac OS X you may also use the command line tool linkscraper:
see: http://codesnippets.joyent.com/posts/show/10772