咨询,就免费赠送域名与服务器,咨询热线:15209871721当前位置: 云南SEO|昆明SEO【尘霸科技】 > SEO博客 > 西双版纳SEO博客 >
联系我们
电话咨询:18087101489
E-mail:3302189305@qq.com
地址:云南昆明西山区建德金缘9栋48号

Python整站爬虫开拓v1

作者/整理:云南SEO优化网络公司 来源:互联网 2018-03-11

整站爬虫之-递归算法
1、递归的界说
递归就是子措施(或函数)直接挪用本身或通过一系列挪用语句间接挪用本身,是一种描写问题息争决问题的根基要领。

递归常与分治思想同时利用,能发生很多高校的算法。递归常用来办理布局相似的问题。所谓布局相似,是指组成原问题的子问题与原问题在布局上相似,可以用雷同的要领办理。详细地,整个问题的办理,可以分为两部门:第一部门是一些非凡环境,有直接的解法;第二部门与原问题相似,但比原问题的局限小,而且依赖第一部门的功效。。实际上,云南SEO,递归是把一个不能或欠好办理的大问题转化成一个或几个小问题,再把这些小问题进一步解析成更小的小问题,直至每个小问题都可以直接办理。

因此,递归有两个根基要素:
(1) 界线条件:确定递归到何时终止,也称为递归出口。
(2) 递归模式:大问题是如何解析为小问题的,也称为递归体。
递归函数只有具备了这两个要素,才气在有限次计较后得出功效。

Python整站爬虫v1,既然是v1版本,“界线条件”先跳过~~~

#coding=utf-8 #整站爬虫,版本v1>>>>>>>>>>>>>>>> import StringIO,pycurl,time,random,os,csv,urllib,urllib2,requests,re op_csv=open('url.csv','a') r = re.compile(r'<a href=http://bigwayseo.com/2420/"(.+?)"') daili_list=[] def get_urls_from_url(url): try: # opener = urllib.urlopen(url) # contents = opener.read() # g = r.finditer(contents) # opener.close() # return g # ip=ip() c = pycurl.Curl() c.setopt(pycurl.MAXREDIRS,5) c.setopt(pycurl.REFERER, url) c.setopt(pycurl.FOLLOWLOCATION, True) c.setopt(pycurl.CONNECTTIMEOUT, 120) c.setopt(pycurl.TIMEOUT,120) c.setopt(pycurl.ENCODING,'gzip,deflate') # c.setopt(c.PROXY,ip) c.fp = StringIO.StringIO() c.setopt(pycurl.URL, url) # c.setopt(pycurl.HTTPHEADER,headers) c.setopt(c.WRITEFUNCTION, c.fp.write) c.perform() #code = c.getinfo(c.HTTP_CODE) 返回状态码 html = c.fp.getvalue() html = r.finditer(html) return html except: return [] def panduan(url_data): if 'xxx.com' in url_data: url=url_data.strip() else: url = 'http://www.xxx.com'+url_data return url #应该是叫递归算法,请指正# def get_url(url,data_cache): urls = get_urls_from_url(url) if urls is []: return for url in urls: url_data=url.groups()[0] url=panduan(url_data) if url not in data_cache: data_cache.append(url) op_csv.writelines('%s\n'%url) print url else: continue get_url(url,data_cache) data_cache = [] l=[] get_url("",data_cache)

【本文链接:http://www.yunnanseo.net/seoblog/3332.html,转摘请注明出处,谢谢!】