爬蟲的特殊設置
1.有關headers的設置
在訪問網址的時候,網站會做出對于訪問的限制,比如只能PC訪問,手機訪問等等。這時候需要我們來改變http請求時候的headers來更好的設法繞過限制。
User-Agent : 有些服務器或 Proxy 會通過該值來判斷是否是瀏覽器發出的請求
Content-Type : 在使用 REST 接口時,服務器會檢查該值,用來確定 HTTP Body 中的內容該怎樣解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 調用時使用
application/json : 在 JSON RPC 調用時使用
application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用
在使用服務器提供的 RESTful 或 SOAP 服務時, Content-Type 設置錯誤會導致服務器拒絕服務
urllib可以這樣來設置headers
value = {"key":"value","key2":"value2"}
data = urllib.urlencode(value)
url = "http://www.baidu.com"
headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
request = urllib2.Request(url,data,headers)
response = urllib2.urlopen(request)
print response.read()
這樣我們邊可設置訪問的headers,以便更好的繞過限制。
2.有關Proxy的設置
很多網址對爬蟲也有限制,列入ip限制等來反爬蟲。這時候就需要來用代理來突破這個限制。
import urllib2
proxy_handler = urllib2.ProxyHandler({"http" : 'http://127.0.0.1:8080'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
這樣便可設置代理
3.超時設置
區別有沒有設置data
沒有data設置的時候
response = urllib2.urlopen('http://www.baidu.com', timeout=10)
需要寫明timeout屬性
有設置data時候
response = urllib2.urlopen('http://www.baidu.com',data, 10)
4.DebugLog的使用
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
這樣可以把Debug Log全部打印出來,方便調試