正则表达式—HTML中的匹配
从HTML中文本中提取Email地址和http URL,是在做爬虫时候的经常用到的技术,虽然变成语言本身可以帮助我们找到他们,但是用正则表达式来匹配也是很有用和具有实际意义的方法。
一、匹配HTML Tag
HTML不是有特别严格编程要求的,因此在匹配时会遇到很多特殊情况需要特殊处理,这里仅仅给出一般化的解决方法:
【文本】ddd< input name=dir value=”>”>ddd
【解析】显然,文本中非转义字符>与闭尖括号的提取是难点,不能向往常一样[^>]来提取。
【表达式】 <(“[^”]*”|’[^’]*’|[^’”>])*>
“[^”]*”表示提取双括号的内容
‘[^’]*’表示提取单括号的内容
[^’”>]表示提取其他内容
【注意】也许你用<.*>也能匹配上述文本,但是实际情况时当你遇到的是ddd< input name=dir value=”>”>ddd< / input>时候,它将匹配全部。
二、匹配Link
【文本】< a href=”http://www.csdn.net”>my blog < / a >
【解析】要获取双引号或单引号中间的地址,但不是所有双引号的内容都是Link,“href=”很重要
【表达式】hrefs*=s*(“[^”]*”|”[^’]*”|[^”’>]+)
三、真实世界中提取URL
【文本】read the comments at http://www.baidu.com/ask_tik/index.html you can find …
【解析】URL类型包括:māilto, http, https, ftp
但是有时候文本中并不包含上诉开头,而是直接以www.baidu.com出现。
【表达式1】
(ftp|https?)://[-w]+(.w[-w]*)+|
(?:[a-z0-9]( ? :[-a-z0-9][a-z0-9])?.)+
(?:com
|edu
|gov
|org
|net
|[a-z][a-z])
(
/
[^.!,?:”’<>()[]{}sx7F-xFF]*
(?:[.!,?]+[^.!.?;”’<>()[]{}sx7F-xFF])*
)?
【不包含特殊符号(?!=)的URL的表达式】https?://w+(.w+)+(/w+)*(.w+)*
【包含特殊符号(?!=)的URL简化表达式】
https?://w+(.w*)+(?:.com)*
(/[^”’<>()[]{}sx7F-xFF]*)*
- 上一篇: 正则表达式提取HTML页面的特定部分
- 下一篇: 正则表达式提取html内容