当前位置: 主页 > 日志 > Webscraping >

采用正则匹配抓取JS动态输出的电话号码

 很多网站为了防止用户的隐私信息(电话、手机、邮箱)被爬虫抓取,都对这些信息作了特殊处理后输出。例如,采用JS输出、采用Ajax方式动态加载、以图片的形式显示。

其中最常见的就是采用JS输出,这种方法实现的成本最低,同样也最好被抓取。

例如下面这个页面:

http://www.tripadvisor.com/Hotel_Review-g34859-d1526306-Reviews-Holiday_Inn_Express_Hotel_Suites-Columbus_Georgia.html

 
 
它的电话号码部分是采用JS输出的,JS代码如下:
 
 

 

 

<script> 
<!--
function escramble_751(){
var a,b,c
a='877'
b='-5'
a+='-85'
b+='095'
c='9'
document.write(a+c+b)
}
escramble_751()
//-->
</script> 

更BT的是这个函数名“escramble_751()”还是不断变化的。  

 

不过利用强大的字符串匹配工具“正则表达式”,还是可以很方便地将其提取出来的:

 

 

# code by Python
phone_re = re.compile("a='([ \+\-\d]+?)'.*?b='([ \+\-\d]+?)'.*?a\+='([ \+\-\d]+?)'.*?b\+='([ \+\-\d]+?)'.*?c='([ \+\-\d]+?)'", re.DOTALL)
match = phone_re.search(html)
if match:
a, b, c, d, e = match.groups()
telephone = a + c + e + b + d
else:
telephone = None

[日志信息]

该日志于 2010-12-14 17:25 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “采用正则匹配抓取JS动态输出的电话号码” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部