`
乌拉蕾
  • 浏览: 73526 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

用python编写递归爬取多重网址的网站信息

阅读更多
   项目组要得到这个http://kalug.linux.org.tw/~shawn/project/thesis/目录网址下面的所有文件以及这个文件目录的下层目录以及更下层目录的文件包括这个,用迅雷,flashget好像都没这样的功能:找到给一个链接,然后再递归爬取这个链接下的所有链接的。
   于是自己写了一个,好像还行o(∩_∩)o...呵呵 下面是代码,这里主要爬取pdf与doc文件。

# -*- coding: utf-8 -*-
import urlparse,urllib,re,os
"""
this class is mainly used to crawl the deep url in the urls
do this work for 242
"""
class SpiderMulti:
        
    def read(self,url):
        urlli=self.analy(url)
        urldic = {}
        cutli=urlli[1:]
        for x in cutli:
            urldic.update(x)
        for url in [x.keys()[0] for x in cutli]:
            if self.islink(url,urldic):
                print url
                self.read(url)
            else:
                self.download(url,urldic)

                
    def analy(self,url):
        urlli=[]
        try:
            html=urllib.urlopen(url).read().split('\n')
            orignalUrl = url    #re.search(r'<h2>(.*?)</h2>',url,re.I|re.DOTALL)
            for eachline in html:
                #print eachline
                currentFind = re.search(r'href="(.*?)"',eachline,re.IGNORECASE|re.DOTALL)
                if currentFind:
                    urldic = {}
                    curUrl = urlparse.urljoin(orignalUrl,currentFind.group(1))
                    dirFind = re.search(r'class="t".*?>(.*?)<',eachline,re.IGNORECASE|re.DOTALL)
                    curDir = dirFind.group(1)
                    urldic[curUrl]=curDir
                    urlli.append(urldic)
        except:
            print 'can not open ',url
            pass
        
        #print urlli
        return urlli
    
    def islink(self,url,urldic):
        if urldic[url] == 'Directory':
            return True
        else:
            return False
        
    def download(self,url,urldic):
        print '=====:',url,urldic[url]
        if (self.isfile(url)):
            name = os.path.join(r'd:\data',url.split('/')[-1])
            print 'dowm:',url,name
            try:
                f=urllib.urlretrieve(url,name)
            except:
                print 'can not writtofile'
                pass

    def isfile(self,url):
        if re.search(r'doc$|pdf$',url,re.IGNORECASE|re.DOTALL):
            return True
        else:
            return False
        
                
                
if __name__=='__main__':
    t=SpiderMulti()
    url='http://kalug.linux.org.tw/~shawn/project/thesis/'
    t.read(url)


解释一下:
1、主函数是read(),在这里面实现递归。

2、analy(url)函数分析传入的url,提取出该页的url链接,当然如果你要用你自己的url这里需要改变的是正则表达式的匹配规则。返回一个列表,列表的元素是字典,key是当前的链接地址,值是该地址对应的类型(这里主要是针对该类网站这样设计的,大家可以打开看看网页
的结果)。

3、islink()函数是判断输入的url是不是目录,如果是则递归执行read()函数

4、download()函数是:输入的链接对应的是个文件,但是不一定是我们想要的pdg或者doc文件,所以先用isfile()函数判断一下,然后再进行下载,完成任务。呵呵
0
0
分享到:
评论

相关推荐

    python3.6.3递归爬取2018年最新国家统计局地区数据存入mysql

    python3.6.3递归爬取国家统计局地区数据存入mysql,可以自定义爬取省市区县乡镇社区5级 数据来源:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html get_level爬取到哪一级的数据 1省,2市,3区县...

    python3.6.3递归爬取2018年最新国家统计局地区数据存入mysql-增强版含建表sql

    python3.6.3递归爬取国家统计局地区数据存入mysql,可以自定义爬取省市区县乡镇社区5级 数据来源:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html get_level爬取到哪一级的数据 1省,2市,3区县...

    Python小工具爬取PPT模板.zip

    在这个“Python小工具爬取PPT模板”的项目中,我们看到一个使用Python编写的爬虫工具,其目标是自动化地从网络上抓取PPT模板。这个压缩包包含了一个名为"spider.exe"的可执行文件,可能是经过编译的Python代码,方便...

    python爬虫-爬取豆瓣音乐

    本教程将聚焦于如何使用Python来爬取豆瓣音乐的相关信息,这涵盖了网页结构分析、HTTP请求、解析HTML以及数据存储等多个方面。 首先,我们需要了解Python中的几个关键库,如requests和BeautifulSoup。requests库...

    基于Python的爬取今日头条文章及视频+源代码+文档说明

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    Python-pythonscrapy爬取电影天堂所有电影

    在本案例中,“Python-pythonscrapy爬取电影天堂所有电影”项目旨在利用Scrapy来抓取电影天堂网站上的电影资源信息。电影天堂是一个知名的在线电影资源平台,提供了丰富的电影下载链接和介绍信息。 首先,我们要...

    爬取微博数据_爬取微博_python爬虫_爬取微博数据并可视化_数据开发_微博分析_

    在本文中,我们将深入探讨如何使用Python爬虫技术来爬取微博数据,分析情感倾向,以及将结果以可视化的方式展示。首先,让我们了解为何要进行微博数据爬取以及它的价值。 微博作为中国的一个社交媒体平台,拥有海量...

    Python基于递归算法实现的走迷宫问题

    在探讨如何使用Python实现走迷宫问题之前,我们先来了解一下递归算法的基本概念及其应用场景。 **递归**是一种非常重要的算法思想,在计算机科学中有着广泛的应用。简单来说,递归是指一个函数直接或间接地调用自身...

    python爬取链家网租房数据

    在Python编程领域,爬虫技术是一项非常实用的技能,它能帮助我们自动化地从网站上获取大量信息。在这个“python爬取链家网租房数据”的项目中,我们将深入探讨如何利用Python来抓取链家网上的租房信息,并将数据保存...

    使用python爬取某租房网站租房信息

    在这个案例中,我们将深入探讨如何使用Python来爬取一个特定的租房网站上的信息,并将这些数据保存到Excel文件中。这个过程涉及到多个知识点,包括网络请求、HTML解析、数据提取、异常处理以及数据存储。 首先,...

    python递归计算N!的方法

    本文实例讲述了python递归计算N!的方法。分享给大家供大家参考。具体实现方法如下: def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) 希望本文所述对大家的Python程序设计有所帮助...

    Python-WenshuSpiderScrapy框架爬取中国裁判文书网案件数据

    在这个项目中,我们使用Python的Scrapy框架来爬取中国裁判文书网上的案件数据。Scrapy是一个强大的、专门用于网页抓取和数据提取的Python库,它提供了高效且灵活的架构,使得网络爬虫的编写变得简单易行。 首先,让...

    使用python对链家的小区信息进行爬取

    本项目专注于从链家网站上抓取小区信息,这涉及到网络爬虫的基本原理、Python的相关库,以及数据处理和分析技巧。 首先,我们需要了解Python中的几个关键库。`requests`库用于发送HTTP请求,获取网页HTML内容;`...

    python 二手车(数据爬取).zip

    在爬取二手车数据的过程中,首先需要找到目标网站,比如58同城,该网站提供了丰富的二手车信息。然后,分析网页结构,确定数据所在的位置,例如车型、价格、里程、上牌日期等。这通常涉及到HTML元素的定位,如类名、...

    Python用递归实现字符串反转

    ### Python用递归实现字符串反转 #### 知识点概览 1. **递归的基本概念** 2. **Python中的递归函数实现** 3. **字符串处理与操作** 4. **递归在字符串反转中的应用** 5. **递归调用的深度限制问题** #### 递归的...

    python爬取新浪网各类信息源码.rar

    本压缩包“python爬取新浪网各类信息源码.rar”提供了一套使用Scrapy框架搭建的爬虫代码,帮助用户了解如何通过Python高效地抓取新浪网的各种信息。 Scrapy是一个强大的Python爬虫框架,它包含了构建、调度爬取任务...

    python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)

    在本文中,我们将探讨如何使用turtle模块来绘制三种递归图形:螺旋、二叉树和谢尔宾斯基三角形。 1. **递归绘制螺旋** 螺旋图案是通过不断调整乌龟的前进距离和方向来实现的。在`draw_spiral`函数中,我们首先让...

    使用python编写的用于爬取百度贴吧数据的爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续...然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

    详解python使用递归、尾递归、循环三种方式实现斐波那契数列

    但Python标准解释器并未对尾递归进行优化,所以尾递归在Python中的效果并不明显。 3. **循环**: 循环是最有效的方法,如 `Fib_circle` 函数所示。通过循环,我们可以避免递归带来的额外开销,只需线性时间复杂度...

    Python中递归函数的使用示例

    使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。 使用步骤: ...目的:帮助理解递归函数在Python中的具体使用。

Global site tag (gtag.js) - Google Analytics