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

来源:互联网 发布:ceic中国经济数据库 编辑:程序博客网 时间:2024/05/29 16:30

      考虑到各个网页的复杂性,以及标签的多层嵌套性,我打算提出一个策略,那就是:基于类型网站的分类提取策略。具体如下:门户网站就是提取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 字节,从需求上讲基本能符合爬虫的搜索速度要求,而且又最大化地提取了网页的信息。至于数据库方面,加多几个字段供相应信息的存储。

原创粉丝点击