zoukankan      html  css  js  c++  java
  • python 网络爬虫(二) BFS不断抓URL并放到文件中

    上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能。

    本篇追加如下功能:

    【1】广度优先搜索不断抓URL,直到队列为空

    【2】把所有的URL写入文件中

    【3】对于不可访问或错误访问的URL,有try except 处理

    spider.py

    # -*- coding: cp936 -*-
    import urllib,Queue,sgmllib,re,os
    
    class URLList(sgmllib.SGMLParser):
        def reset(self):
            sgmllib.SGMLParser.reset(self)
            #maxsize < 1 表示无穷队列
            self.URLqueue = Queue.Queue(maxsize = -1)
        def start_a(self,attrs):
            href = [v for k,v in attrs if k == 'href']
            if href:
                for u in href:
                    #判断URL是不是正确的,href都必须有"http://"
                    pat = re.compile(r'http://(.+?)')
                    #False,0,'',[],{},()都可以视为假,也可以用len()==0判断列表为空
                    if len(re.findall(pat,u)) == 0:
                        continue
                    
                    self.URLqueue.put(u)
                    
    def getURLList(url,parser):
        try:
            URLdata = urllib.urlopen(url)
            parser.feed(URLdata.read())
            URLdata.close()
        except:
            return 
    
    startURL = "http://www.baidu.com"
    parser = URLList()
    getURLList(startURL,parser)
    
    outfile = startURL[7:len(startURL)]+".txt"
    out = open(outfile,'w+')
    
    
    try:
        #BFS
        while parser.URLqueue.empty() == False:
            url = parser.URLqueue.get()
            print url
            out.writelines(url+'
    ')
            getURLList(url,parser)
    finally:
        parser.close()
        out.close()
    


  • 相关阅读:
    iOS程序-UIScrollView的基本使用
    iOS方法类:CGAffineTransform
    指南针开发
    iOS用if语句判断null
    UIView常用的一些方法
    xcode视图缩短了
    TCP&UDP基础
    朴素贝叶斯方法在乳腺肿块检测中的应用
    进程与线程的相关知识点总结
    C++中sizeof操作符与strlen函数
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3313311.html
Copyright © 2011-2022 走看看