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

2023-11-14

项目组要得到这个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()函数判断一下,然后再进行下载,完成任务。呵呵
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 还在用夸克?这3款能安装插件的手机浏览器不香吗

    说到浏览器插件 很多人想到的多数是电脑上的玩法 实际上 随着手机浏览器功能越来越完善 很多手机浏览器已经开始支持插件的使用 也就是说 支持安装插件的手机浏览器 不仅能体验如电脑般丝滑强大的功能 而且又不会造成内存过分臃肿 开启响应缓慢的问题
  • GLSL着色器的正确文件扩展名是什么?

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 glslangValidator exe工具使用 二 着色器程序后缀名 前言 我正在学习glsl着色 我遇到了不同的文件格式 我见过人们给出他们的顶点和片段着色器 ve
  • Java中在特定区间产生随机数

    原文地址 http blog sina com cn s blog 59aebaa10100ct47 html 参考地址 http blog csdn net codefunjava article details 44408555 htt
  • 贝叶斯分类器-机器学习ML

    参考 1 统计学习方法 李航 2 https baike baidu com item E8 B4 9D E5 8F B6 E6 96 AF E5 88 86 E7 B1 BB E5 99 A8 1739590 fr aladdin 3 h
  • 力扣|错误的集合 C语言

    题目连接 错误的集合 集合 s 包含从 1 到 n 的整数 不幸的是 因为数据错误 导致集合里面某一个数字复制了成了集合里面的另外一个数字的值 导致集合 丢失了一个数字 并且 有一个数字重复 给定一个数组 nums 代表了集合 S 发生错误
  • 浅析muduo库中的定时器设施

    一个设计良好的定时器在服务端的应用程序上至关重要 muduo定时器的实现陈硕大牛在书中已经详细的谈过 笔者尝试从源码的角度解读定时器的实现 如果理解不对 欢迎指正 在muduo的定时器系统中 一共由四个类 Timestamp Timer T
  • 学习CSSGrid布局

    一 重要术语 CSS Grid 网格 布局 又称为 Grid 网格 是一个二维的基于网格的布局系统 它的目标是完全改变我们基于网格的用户界面的布局方式 FlexBox 一维布局 Grid 二维布局 Flexbox 和 Grid 能协同工作
  • C# 文件IO

    文章目录 判断某个文件夹是否存在 获取当前运行程序 exe或dll 所在路径 创建文件夹 移动 剪切 文件夹 复制文件 创建文件 覆盖写文件 方式一 使用FileStream 方式二 使用StreamWriter 追加写文件 读文件 一 一
  • springBoot国际化的一种方式

    引言 当我们的应用面向不同国家用户时 根据不同的locale返回不同的语言信息的国际化功能就显得有必要了 一般来说国际化主要表现在前端用户界面上 在现在前后端分离的背景下 前端页面的国际化交由前端代码独立完成 少部分表现在后端上 后端主要表
  • HTML存储详解

    和大家一起先来了解一下H5之前的存储方式 cookies的诞生 http请求头上带着数据 大小只能为4K 主Domain的污染 下面是百度的一些Cookies HTTP中带 的表示 只能被服务器端修改的数据 一般用来存储身份验证等信息 co
  • 搞清axis的含义,这一篇就够了!

    文章目录 axis的含义 旁门左道式理解 二维数组中的axis 三维数组中的axis 正规理解 axis的含义 在自己分析之前先摆上官方关于多维数组中axis的值的定义 axis 0 表示第一个维度 axis 1 表示第二个维度 axis
  • Java异步调用的几种方式

    一 通过创建新线程 二 通过线程池 三 通过 Async注解 四 通过CompletableFuture 日常开发中 会经常遇到说 前台调服务 然后触发一个比较耗时的异步服务 且不用等异步任务的处理结果就对原服务进行返回 这里就涉及的Jav
  • css3 transaction display,HTML5+CSS3 本地数据库基本

    HTML5 CSS3 本地数据库基本 Web SQL Database 本地数据库 是一个已经废弃的规范 但是鉴于除了IE和Firefox 其他浏览器都已经实现了Web SQL Database 并且它还具有一些Storage 存储 所不具
  • Windows更新CUDA

    经过整整一天的奋战 终于成功更新了CUDA 特此记录一下这个艰难的过程 最最最先要确定的是 你的电脑得是支持GPU的 一 查看电脑现存CUDA版本 电脑搜索NVIDIA 在出现的页面中的左下角点击 系统信息 出现以下界面 可以看到驱动版本是
  • LXC 3.0交叉编译

    LXC交叉编译 代码下载 git clone https github com lxc lxc git 代码文件编译 编写交叉编译文件 host machine system linux cpu family arm cpu arm end
  • redis的持久化和主从复制

    什 么是redis持久化 redis作为一个键值对内存数据库 nosql 数据存储在内存当中 在处理客户端请求时 所有操作都是在内存当中运行 问题 存储在内存中的数据 只要服务器关机 内存中的数据就会消失 不仅服务器关机会造成数据消失 re
  • VMware虚拟机安装Linux系统

    文章目录 前言 一 Linux是什么 二 安装步骤 1 新建虚拟机 2 安装CentOS 7 总结 前言 之前使用VMware虚拟机安装了Windows系统 本文讲的是使用VMware虚拟机安装Linux系统 提示 以下是本篇文章正文内容
  • Modbus通信协议详解

    一 Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言 通过此协议 控制器相互之间 控制器经由网络 例如以太网 和其它设备之间可以通信 它已经成为一通用工业标准 有了它 不同厂商生产的控制设备可以连成工业网络 进行
  • APPCAN + wampserver 实现简单的个人登录功能

    开发背景 Appcan wampserver 其中wampserver主要用于提供本地服务器和数据库 这是软件开发工程这门课中的一个大作业 需要实现 1 首页 index html 首页包含 滚动图片 新闻列表和导航栏 首页内容通过Requ
  • 用python编写递归爬取多重网址的网站信息

    项目组要得到这个http kalug linux org tw shawn project thesis 目录网址下面的所有文件以及这个文件目录的下层目录以及更下层目录的文件包括这个 用迅雷 flashget好像都没这样的功能 找到给一个链