python进行爬虫
来源:互联网 发布:oracle sql语句面试题 编辑:程序博客网 时间:2024/06/16 07:48
转自:http://i-421-163-com.iteye.com/blog/252981
项目组要得到这个http://kalug.linux.org.tw/~shawn/project/thesis/目录网址下面的所有文件以及这个文件目录的下层目录以及更下层目录的文件包括这个,用迅雷,flashget好像都没这样的功能:找到给一个链接,然后再递归爬取这个链接下的所有链接的。 于是自己写了一个,好像还行o(∩_∩)o...呵呵 下面是代码,这里主要爬取pdf与doc文件。 Python代码 收藏代码# -*- 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
- python进行爬虫
- Python使用BeautifulSoup进行爬虫
- [Python]利用Python进行网络爬虫
- 使用python进行爬虫学习(一)
- [python爬虫]--调用有道词典进行翻译
- python利用urlib2进行简单爬虫实例
- Python网络爬虫对知乎首页进行爬取
- Python爬虫:用BeautifulSoup进行NBA数据爬取
- Python+Selenium进行网页多窗口切换爬虫
- python进行爬虫时phantomjs插件的安装
- 【抢课】用Python网页爬虫来进行选(qiang)课
- python爬虫-->爬虫基础
- [爬虫] Python爬虫技巧
- Python爬虫
- python 爬虫
- python 爬虫
- python 爬虫
- python爬虫
- MVVM指南二:Flickr搜索深入
- JAVA之Class类和getClass
- C语言深度解剖——读书笔记-6、预处理
- 30天自制操作系统day28
- shell之find命令
- python进行爬虫
- Cinatra:高性能现代C++ Web框架
- Linux显示中文乱码解决方法
- Android中Parcelable接口用法
- 控件——SeekBar/RatingBar
- Linux的安装与android环境搭建的常见问题
- Android AudioFlinger加载HAL层流程
- 第75讲:模式匹配下的For循环学习笔记
- hdu5338 贪心+线段树+二分+树状数组