六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 42|回复: 0

programming collective intelligence读书笔记三

[复制链接]

升级  60%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
30
 楼主| 发表于 2013-1-27 05:17:55 | 显示全部楼层 |阅读模式
searchengine:  programming collective intelligence
一个简化的searchengine骨架...深度遍历link...
试了一下,公司网速太慢,爬不动
...searchengine的瓶颈在带宽和并发计算 programming collective intelligence
python的BeautifulSoup库很不错,php,ruby就没这么好的库,提取link要自己写匹配函数

>>> import searchengine
>>> c=searchengine.crawler()
>>> c=searchengine.crawler('')
>>> c.crawl()
indexing http://kiwitobes.com/wiki/
indexing http://kiwitobes.com/wiki/Citeseer.html
indexing http://kiwitobes.com/wiki/Insert_%2528SQL%2529.html
indexing http://kiwitobes.com/wiki/Spacecraft_propulsion.html
indexing http://kiwitobes.com/wiki/Noctis.html
indexing http://kiwitobes.com/wiki/Methods.html
indexing http://kiwitobes.com/wiki/32_%2528number%2529.html
...programming collective intelligence


searchengine.py
------------------------
import urllib2
from BeautifulSoup import *
from urlparse import urljoin
ignorewords=set(['the','of','to','and','a','in','is','it'])
baseUrl = set(['http://kiwitobes.com/wiki/'])

class crawler:
  
  def __init__(self,dbname):
    pass
  def __del__(self):
    pass
  def dbcommit(self):
    pass
  def getentryid(self,table):
    return None
  def gettextonly(self,soup):
    return None
  def separatewords(self,text):
    return None
  def addlinkref(self,urlFrom,urlTo,linkText):
    pass
  def createindextables(self):
    pass
  def addtoindex(self,url,soup):
    print 'indexing %s' %url
  def isindexed(self,url):
    return False
  def crawl(self,pages=baseUrl,depth=2):
    for i in range(depth):
      newpages = set()
      for page in pages:
        try:
          c = urllib2.urlopen(page)
        except:
          print "could not open %s" %page
          continue
        soup=BeautifulSoup(c.read())
        self.addtoindex(page,soup)
        
        links=soup('a')
        for link in links:
          if ('href' in dict(link.attrs)):
            url = urljoin(page,link['href'])
            if not self.isindexed(url):
              newpages.add(url)
              text = self.gettextonly(link)
              self.addlinkref(page,url,text)
        self.dbcommit()
      pages=newpages

--------------programming collective intelligence
chenjinlai
2008-05-07
programming collective intelligence
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表