c.setopt(TIMEOUT, 120)
for key in kwargs:
c.setopt(locals()[key], kwargs[key])
c.setopt(URL, url)
c.setopt(WRITEFUNCTION, s.write)
if ‘USERAGENT’ not in kwargs:
c.setopt(USERAGENT, useragent)
if ‘REFERER’ not in kwargs:
c.setopt(REFERER, url)
while 1:
try:
c.perform()
break
except:
if retry:
time.sleep(delay)
else:
return False
return s.getvalue()
对于简单的采集琅缦沔需要用到的下载功能,已经被整合在了这个模块之中。如User-agent轮换、自动301/302跳转等、使用当前URL作为REFERER的有些取巧的体例等。这个模块的代码可以日后再慢慢理解,此刻只要知道它的用法即可。
首先到放置Python剧本的目录,将前面一段代码保留为curl.py,然后在统一目录下建树一个新文件,输入以下测试代码:
# -*- coding:utf-8 -*-
import curl
print curl.curl('http://g.cn/') #这样即下载了一个网页
#以下是斗劲保险的下载体例,因为各类原因,就算总体很不变的网站也偶然会呈现网页且则无法打开的情形
#当网页下载犯错时,如不美观retry为True,则会不竭重试,直到下载完网页
#delay则指定了几回重试之间的侍旧肃离,以秒为单元
print curl.curl('http://g.cn/', retry=True, delay=1)
#以下用到了一些Curl的参数,具体声名可见:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
print curl.curl('http://g.cn/', FOLLOWLOCATION=False, COOKIE='mycookie')

网友点评
精彩导读
科技快报
品牌展示