Python脚本 – 整站爬虫开发v1

整站爬虫之-递归算法
1、递归的定义
递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。

递归常与分治思想同时使用,能产生许多高校的算法。递归常用来解决结构相似的问题。所谓结构相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小,并且依赖第一部分的结果。。实际上,递归是把一个不能或不好解决的大问题转化成一个或几个小问题,再把这些小问题进一步分解成更小的小问题,直至每个小问题都可以直接解决。

因此,递归有两个基本要素:
(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="(.+?)"')
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("http://www.xxx.com/",data_cache)

THE END
分享
二维码
海报
Python脚本 – 整站爬虫开发v1
整站爬虫之-递归算法1、递归的定义递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。 递归常……
<<上一篇
下一篇>>