Python爬蟲

1.初步認識

// 代碼1
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()

// 代碼2
import urllib2
request = urllib2.Request("http://www.baidu.com")    //url請求
response = urllib2.urlopen(request)    //打開網頁
print response.read()    //讀取響應信息

說明:

  • 獲取url請求:調用urllib2庫里的urlopen方法,協(xié)議為http請求
  • urlopen函數(shù):urlopen( url, data, timeout)
    • url:網址
    • data:參數(shù)
    • timeout:超時時間
  • 返回響應信息:response.read()

2.數(shù)據(jù)傳送方式—POST&GET

1.POST 相對比較安全,參數(shù)信息不會全部顯示在網頁上,需要傳遞參數(shù),可以用data傳遞

import urllib
import urllib2
 values = {"username":"1016903103@qq.com","password":"XXXX"}    //注意到這個寫法
data = urllib.urlencode(values) 
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib2.Request(url,data)                        //參數(shù)以data變量傳遞
response = urllib2.urlopen(request)
print response.read()

2.GET 相對不安全,將參數(shù)信息暴露在鏈接上

import urllibimport urllib2
values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values) 
url = "http://passport.csdn.net/account/login"
geturl = url + "?"+data            //注意到這塊有一個問號
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()

3.參數(shù)信息

1.Headers頭部信息
[圖片上傳中。。。(1)]* User-Agent:請求身份

  • referer:”反盜鏈“ ——可以知道該網頁是從哪個鏈接點擊進來的(也就是網頁返回的地方)

  • Accept:指定客戶端可接收的內容類型(順序為接收端接受的次序)

  • Accept-Language:HTTP瀏覽器返回頁面信息優(yōu)先選擇的語言

  • Acceot-Charset:瀏覽器所接受的編碼集

  • Accept-Encoding:客戶端瀏覽器所允許的壓縮格式
    說明:允許服務器將輸出內容發(fā)送到客戶端之前進行壓縮,節(jié)約帶寬

  • Content-Type:【使用REST接口時】確定頁面解析方式——一般在post提交時使用
    使用RESTful活SOAP服務時,服務器拒絕訪問

  • application/xml:

  • Connection:是否持久連接

    • Keep-Alive(或HTTP1.1):持久連接。
    • 如何實現(xiàn):web服務器返回客戶端http頭信息中發(fā)送一個Content-Length
  • Cookie:HTTP發(fā)送請求時,同時會傳遞cookie中的內容
    2.設置Headers

import urllib  
import urllib2  
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read()

另外,若一些網頁設置防盜鏈的設置,可以設置referer來應對

headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  ,
                        'Referer':'http://www.zhihu.com/articles' }

3.Proxy代理設置
考慮到這么一個情況,一些網頁統(tǒng)計IP地址訪問次數(shù),若一段時間內,一個IP訪問次數(shù)太多,這個IP就會被鎖定,因此需要設置代理迷惑網頁

import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

4.Timeout設置:設置等待時間
這里需要注意,urlopen(url, data, timeout),參數(shù)為省略參數(shù),即,可能會有多個data參數(shù)傳遞,因此在傳遞url,timeout(data參數(shù)為空時)參數(shù)時,需要寫明timeout=10,而非僅僅是一個10

import urllib2    // data為空
response = urllib2.urlopen('http://www.baidu.com', timeout=10)
import urllib2    //data不為空
response = urllib2.urlopen('http://www.baidu.com',data, 10)

5.DebugLog:打開Debug Log

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

4HTTP請求方式

HTTP請求有:POST、GET、HEAD、PUT、DELET、OPTIONS
  • HEAD:相當于GET(僅包含頭信息)
  • PUT:類似于POST
    區(qū)別:PUT指定資源存放位置,POST的資源存放位置由服務器決定
  • OPTION:獲取當前URL所支持的方法
import urllib2
request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT' 
response = urllib2.urlopen(request)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容