Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400264
  • 博文数量: 77
  • 博客积分: 2031
  • 博客等级: 大尉
  • 技术积分: 855
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 19:54
文章分类

全部博文(77)

文章存档

2011年(1)

2009年(52)

2008年(24)

我的朋友

分类: Python/Ruby

2009-03-18 21:49:45

爬虫工作的基本原理就是,给定一个初始的url,下载这个url的网页,然后找出网页上所有满足下载要求的链接,然后把这些链接对应的url下载下来,然 后再找下载下来的这些网页的url,我们可以用广度优先搜索实现这个算法.

#!/usr/bin/python
import urllib2
import re

def downURL(url,filename):
    print url
    print filename
    try:
        fp = urllib2.urlopen(url)
    except:
        print 'download exception'
        return 0
    op = open(filename,"wb")
    while 1:
        s = fp.read()
        if not s:
            break
        op.write(s)

        fp.close()
        fp.close()
        return 1

#downURL('','http.log')

def getURL(url):
    try:
        fp = urllib2.urlopen(url)
    except:
        print 'get url exception'
        return 0
    
    pattern = re.compile("[^\>]+.shtml")
    while 1:
        s = fp.read()
        if not s:
            break
        urls = pattern.findall(s)
    fp.close()
    return urls

def spider(startURL,times):
    urls = []
    urls.append(startURL)
    i = 0
    while 1:
        if i > times:
            break;
        if len(urls)>0:
            url = urls.pop(0)
            print url,len(urls)
            downURL(url,str(i)+'.htm')
            i = i + 1
            if len(urls)                urllist = getURL(url)
                for url in urllist:
                    if urls.count(url) == 0:
                        urls.append(url)
        else:
            break
    return 1
spider('',10)
阅读(10236) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

geo8982009-08-09 17:37:00

大家都在用Python和Rail等设计网络爬虫,有一个beatiful soap好像是用python做的。 我却选择了Javascript开发MetaSeeker工具包,在客户端做的,是Firefox插件,跟服务器侧相比各有千秋,但是采用这种方案的太少了,难于找到切磋的朋友。 有兴趣下载一个我的软件试试,代码是可读的:http://www.gooseeker.com 不光是网络爬虫,是一套完整的解决方案,例如,我做的威客任务搜索:http://www.metaseeker.cn/projectsearch/home.htm