信息度的分类提取策略-------基于python(网络爬虫)

      考虑到各个网页的复杂性,以及标签的多层嵌套性,我打算提出一个策略,那就是:基于类型网站的分类提取策略。具体如下:门户网站就是提取titlemeta之间的正文内容放到数据库,非门户网站,则直接提取标签<p></p><br></br>之间的内容。当然就优先来讲,<p>>><br>为什么会用此策略呢。。原因很简单,分析了一些网页后,发现一些非门户网站的主题内容不是放在<p></p>标签之间就是<br><br>之间,所以,分析此网站的主题内容,只要提取该部分就行了。当然提取结果会相应放在数据库里面,不过这部分内容仅仅作为显示以及用户关键字搜索用到。其他用到的正则表达式方面呢。?我想了一下,我们数据库的数据不能一整块一整块地放,最好是分开放,分类放。所以,电话,邮编,邮件地址等等方面要提取,因此我们需要对原文件进行多次匹配。所以,这就涉及到效率的问题了,匹配太多,效率低。根据,网页信息的最大化匹配,我只选择了几种匹配模式,除了上面四种,当然还有电话

name=re.findall(r’ /d{4}-/d{7}|/d{3}-/d{8}’,html,re.I)

邮件地址:name=re.findall(r’ /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*’,html,re.I)

至于其他的如QQ或者邮编之类的,因为存在歧义,也就不提取了。

综合测试:

import urllib2

import re

import datetime

import time

 

ty=datetime.datetime

def test():

     h=urllib2.urlopen("http://www.nowpei.com/q/webdt/p/b05fc8ff-c3a9-4fa2-8bb6-ce5193dff2a9")

     html=h.read()

     x=ty.now()

     name=re.findall(r'<p>[^</p>]*',html,re.I)

     for j in name:

         print j

     name=re.findall(r'<title>[^</title>]*',html,re.I)
     for j in name:
         print j
     name=re.findall(r'<meta[^/>]*',html,re.I)
     for j in name:
         print j

     name=re.findall(r' /d{4}-/d{7}|/d{3}-/d{8}',html,re.I)

     for j in name:

         print j

     name=re.findall(r'/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*',html,re.I)

     for j in name:

         print j

     y=ty.now()

     z=y-x

     print z

 

test()

结果如下:

<p>&nbs
 0511-4405222
021-87888822
0:00:00.766000

因篇幅问题略去了前面的搜索结果,测试了一下时间基本在0.6~0.8秒之间完成,页面大小为79,687 字节,从需求上讲基本能符合爬虫的搜索速度要求,而且又最大化地提取了网页的信息。至于数据库方面,加多几个字段供相应信息的存储。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值