我正在尝试使用正则表达式为其标题抓取HTML页面。这是我正在尝试的:
\<title\>\A\Z\</title\>
有什么建议吗?
答案 0 :(得分:20)
<title>(.*?)</title>
.*?
周围的括号可让您引用捕获组。您的正则表达式库可能有一种方法可以返回捕获组中匹配的内容。索引为0的组是整场比赛。所以你应该选择组索引1,这是它遇到的第一个起始括号(这里只有一组括号)。
在某些图书馆,您需要:
.*?<title>(.*?)</title>.*
因为有些需要完全匹配字符串。
请注意,这不是万无一失的。网页可以通过以下页面破坏您的正则表达式:
<html>
<script>
// <title>HAHA YOU GOT THE WRONG TITLE</title>
</script>
<title>The Actual title</title>
</head><body></body>
</html>
您可以通过在匹配标题之前使正则表达式更复杂来避免这种可能性。但是,这并没有真正起作用。因为假标题可能位于HTML评论<!-- <title></title> -->
或/* javascript */
评论中。
因此,最好使用实际的HTML解析器。您可以搜索谷歌以找到其中许多。
如果您使用的是Ruby,则可以使用nokogiri gem - http://nokogiri.org/。
对于Java - http://htmlparser.sourceforge.net/。
对于python - http://docs.python.org/library/htmlparser.html。