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')