Python模擬HttpRequest的方法總結



Python可以說是爬網的利器,本文主要介紹了一些python來模擬http請求的一些方法和技巧。

Python處理請求的類庫有兩個,urllib,urllib2。 這兩個類庫並不是一個類庫的兩個不同版本,urllib主要用來處理一些url相關的內容,發送請求的時候,請求對象只能是一個url。urllib2可以用request對象來實現請求,這樣就可以實現如偽造頭部,設置代理,http get,http post等方法。

閱讀本文需要了解http請求的一些基本知識,如:

  • 什么是httpwebrequest,httpwebresponse
  • 什么是get,post
  • 什么是cookie

本文主要介紹模擬請求用到的這些方式:

  • 設置代理
  • 偽造頭部或者Header信息
  • 啟用cookie
  • url參數的處理

使用urllib2.urlopen直接發送

import urllib2

url = 'http://www.baidu.com/'
response = urllib2.urlopen(url) ##urlopen接受傳入參數是string或者是request
response_text = response.read()

 

使用urllib.build_opener

直接發送請求

import urllib2

url = 'http://www.baidu.com/'

opener = urllib2.build_opener()
response = opener.open(url)
response_text = response.read()

通過代理訪問站點

proxy_handler = urllib2.ProxyHandler({"http" : 'http://localhost:8888'})
opener = urllib2.build_opener(proxy_handler)
response = opener.open(url)
response_text = response.read()

請求中附帶request body(http post)

opener = urllib2.build_opener()
response = opener.open(url,'request body')
response_text = response.read()

body中如果是key-value形式的,可以參照下面的url處理部分來處理

啟用Cookie

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(url)
response_text = response.read()

使用urllib2.Request

請求中添加自定義的Header信息

request = urllib2.Request(url)
request.add_data('1234567')
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)

處理url中的參數信息

無論是使用get方式還是post方式,經常會遇到需要使用參數的形式,處理參數可以使用下面的類庫

參數集合轉string

para = {'111':'222','aaa':'bbb'}
encodeurl = urllib.urlencode(para)
輸出aaa=bbb&111=222

url參數轉dictionary

url = 'https://www.baidu.com/s?wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3'

splitresult_instance = urlparse.urlsplit(url)

 

輸出對象:

SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3', fragment='')

想轉成集合只要

result_dic=urlparse.parse_qs(splitresult.query)

通過這種處理方式,把data信息放在url上來實現http get,放在body中實現http post。

 

此文同時托管在了 http://simmon.club/blog/Python-HttpRequest/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM