1. 程式人生 > >Python爬蟲請求頭、請求代理以及cookie操作

Python爬蟲請求頭、請求代理以及cookie操作

·爬蟲程式urllib2模組底層操作;

·請求頭的設定和新增;

·請求代理的種類和型別;

·關於cookie的操作(手動新增/程式自動獲取)

一、爬蟲底層操作和請求頭的設定

1.demo01_爬蟲底層操作

雖然urllib2模組是爬蟲的底層操作,但並不是程式的底層操作,在其內部的urlopen函式也是有自己封裝的內容,實則引數為一個request即請求物件。

# -*- coding:utf-8 -*-
# 引入需要的模組
import urllib2

# 定義url
url='https://www.taobao.com'
# 根據url構建請求物件
request=urllib2.Request(url)

# 
使用urllib2urlopen函式傳送請求物件 response=urllib2.urlopen(request) print response.read()

2.demo02_請求頭的設定

客戶端在瀏覽器傳送請求給伺服器時,會攜帶請求頭,在請求頭中有一個User-Agent屬性.

User-Agent:使用者代理 User Agent,是指瀏覽器,它的資訊包括硬體平臺、系統軟體、應用軟體和使用者個人偏好。在X.400電子系統中,使用者代理是一種對資料打包、創造分組頭,以及編址、傳遞訊息的部件。使用者代理並不是僅指瀏覽器,還包括搜尋引擎。

User-Agent其實就是代表使用者訪問伺服器資料的工具,一般情況下,User-Agent是瀏覽器發起請求時,請求頭中包含的資料,主要描述了傳送請求的瀏覽器的版本及核心,操作資訊內容等。

①請求頭中的資料可以被重新設定。②請求頭中可以字典的形式傳送自定義資料。

瞭解都有哪些User-agent

設定請求頭

Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50

Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50

Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;

Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)

Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)

Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)

Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1

Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;en)Presto/2.8.131Version/11.11

Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11

Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TheWorld)

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0)

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)

# -*- coding:utf-8 -*-
# 引入需要的模組
import urllib2
import random

# 定義url
url = 'https://www.taobao.com'
# 多個user_agent列表
ua = ['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
      'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)',
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11']

# 隨機選取一個user_agent
user_agent = random.choice(ua)
# 定義請求頭
my_header = {'User-agent': user_agent}


# 或者使用函式為請求頭增加資料
# request=urllib2.Request(url)
# request.add_header('header',my_header)
# 根據url構建請求物件,並設定請求頭(設定請求頭資訊,就是設定瀏覽器版本和核心資訊,讓爬蟲程式偽裝成客戶端瀏覽器)
request = urllib2.Request(url, headers=my_header)

# 使用urllib2urlopen函式傳送請求物件
response = urllib2.urlopen(request)

print response.read()

二、請求方式

1.get請求方式:訪問百度搜索

一般情況下都是在Url地址中直接拼接查詢字串的get引數,完成資料的操作

注意:url地址中的中文,在時下較新的瀏覽器中可以正常處理,但是不一定相容版本較舊的瀏覽器,中文的處理一定要進行編碼操作

通過urllib.urlencode()的方式,將一個字典資料編輯成k=v形式的資料作為引數拼接給url地址

# -*- coding:utf-8 -*-
'''
get方式訪問百度搜索'''
# 引入需要的模組
import urllib2
import urllib
import random


# 多個user_agent列表
ua = ['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
      'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)',
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11']

# 隨機選取一個user_agent
user_agent = random.choice(ua)
# 定義請求頭
my_header = {'User-agent': user_agent}
# 定義url,根據抓包工具分析得到的訪問路由,由於參可變,所以後面以拼接的方式將引數拼接上來
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&'
get_params=raw_input('請輸入要搜尋的內容:')
# kw='',即瀏覽器中url路徑引數形式
data={'wd':get_params}
# 上面data為字典形式,通過urllib模組的urlencode函式可以將輸入的中文編碼,並將字典形式轉換為k=v# 便於在url中顯示,以獲取資料
data=urllib.urlencode(data)
# 將訪問路由url的固定部分(url)和可變引數(data)拼接成完成的full_url
full_url=url+data

# 根據url和請求頭建立一個請求物件
request=urllib2.Request(full_url,headers=my_header)
response = urllib2.urlopen(request)
content=response.read()
with open('qiku.html','w') as f:
    f.write(content)

print (content)

2.post方式訪問有道翻譯

1. urllib2傳送post請求

定義傳送的資料

form_data = {}

將傳送的資料轉換成字串編碼

data = urllib.urlencode(form_data)

構建Request物件時,如果給data引數賦值,預設傳送POST請求

request = urllib2.Request(url, data=data)

urllib2.urlopen(request)# 傳送出去的就是POST請求

傳送POST請求以及POST請求附帶的引數

2. 反[反爬蟲]操作

l 確認目標url地址的資料,執行了反爬蟲機制!

通過抓包工具,得到目標url地址的具體訪問路徑Path以及附帶的引數,然後將這些資料直接在爬蟲程式中進行賦值新增,如果此時訪問失敗,目標url地址的資料可能執行了反爬蟲機制!如~有道線上翻譯~我們將所有的請求資料原封不動的新增到爬蟲程式中,但是得到了錯誤的結果:{errorCode:50},有道線上翻譯執行了反爬蟲機制

l 反[反爬蟲]步驟

分析請求中的資料

追蹤資料的來源

偽造資料

反機制成功!

# -*- coding:utf-8 -*-
'''
訪問url:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
請求引數:
    i hello
    from AUTO
    to AUTO
    smartresult dict
    client fanyideskweb
    salt 1515466801319
    sign 78f918a6eb55b77d633cba89bd8385da
    doctype json
    version 2.1
    keyfrom fanyi.web
    action FY_BY_REALTIME
    typoResult false
'''
# 引入需要的模組
import urllib2
import urllib
import random




#######################################################################
import time
E = "fanyideskweb"
# salt鹽值
r = str(time.time()*1000 + random.randint(1,10))
# 確定翻譯的資料
n = raw_input("請輸入要翻譯的詞語:")
# 確定加密的混淆嗎
O = "aNPG!!u6sesA>[email protected](-"
# 確定sign引數
import hashlib
sign = hashlib.md5(E + n + r + O).hexdigest()


# 設定有道線上翻譯的請求頭
headers = {
    #"Host": "fanyi.youdao.com",
    #"Connection": "keep-alive",
    #"Content-Length": "200",
    #"Accept": "application/json, text/javascript, */*; q=0.01",
    #"Origin": "http://fanyi.youdao.com",
    #"X-Requested-With": "XMLHttpRequest",
    #"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Referer": "http://fanyi.youdao.com/",
    # "Accept-Encoding": "gzip, deflate",
    #"Accept-Language": "zh-CN,zh;q=0.8",
    "Cookie": "OUTFOX_SEARCH_USER_ID_NCOO=2075764580.1728754; [email protected]; JSESSIONID=aaaxakcpWa-oo8wK72ydw; fanyi-ad-id=39535; fanyi-ad-closed=1; ___rl__test__cookies=1515468614442i=hell&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=1515468614446&sign=710df1dcc70f91c1b04e795a34704c8e&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTIME&typoResult=false"
}
#######################################################################


# 定義ua
ua = [
    "Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50",
    "Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50",
    "Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;",
    "Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)",
    "Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)",
]
# 隨機獲取一個ua
user_agent = random.choice(ua)


# 定義url地址
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"


# 定義表單資料
form_data = {
    "i": n,# 要翻譯的詞語
    "from": "AUTO", # 詞語的翻譯之前的語言
    "to": "AUTO", # 詞語翻譯之後的語言
    "smartresult": "dict", # 資料型別
    "client": "fanyideskweb", # 客戶端標識
    "salt": r, # ~~~~可能是~~~時間
    "sign": sign,# ~~~~可能是~~~~md5
    "doctype": "json", # 資料型別
    "version": 2.1,# 版本號
    "keyfrom": "fanyi.web",# 關鍵字
    "action": "FY_BY_REALTIME",# 行為描述
    "typoResult": False # 結果型別
}
data = urllib.urlencode(form_data)


# 封裝請求物件
request = urllib2.Request(url, data=data, headers=headers)
request.add_header("User-agent", user_agent)


# 傳送請求獲取響應資料
response = urllib2.urlopen(request)


# 列印展示資料
print(response.read())

3.爬取百度圖片

確定目標地址[資料訪問的真實路徑path]

確定引數的含義[通過手工更新引數資料,確定引數的用途]

爬取百度圖片頁面中展示的圖片列表[json字串資料]【第一次爬取資料】

篩選圖片連結[確定圖片的規則(http:….jpg/.png),正則表示式篩選目標資料]

img_re_list = re.findall(‘pattern’, content)

迴圈針對每個圖片進行資料爬取【第二次迴圈爬取資料】

response = urllib2.urlopen(img_url) 

with->open() as f->f.write(response.read())

# -*- coding:utf-8 -*-
# 引入需要的模組
import urllib
import urllib2
import re

# 定義訪問路由
url = 'https://image.baidu.com/search/acjson?'
# 定義請求頭
my_header = {
    #'Host': 'image.baidu.com',
    #'Connection': 'keep-alive',
    #'Accept': 'text/plain, */*; q=0.01',
    #'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    'Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1515495630056_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E6%B8%85%E9%A3%8E',
    #'Accept-Encoding': 'gzip, deflate, br',
    #'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': 'BDqhfp=%E6%B8%85%E9%A3%8E%26%260-10-1undefined%26%26766%26%262; BAIDUID=01316FFFC8551DCE978112EC7D40746A:FG=1; BIDUPSID=01316FFFC8551DCE978112EC7D40746A; PSTM=1515224694; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; userFrom=www.so.com; firstShowTip=1; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; cleanHistoryStatus=0; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; indexPageSugList=%5B%22%E6%B8%85%E9%A3%8E%22%2C%22%E5%94%AF%E7%BE%8E%22%2C%22%E4%BD%A0%22%2C%22%E5%8F%91%22%2C%22%E7%BE%8E%E5%A5%B3%22%2C%22%E5%94%AF%E7%BE%8E%E5%9B%BE%E7%89%87%E5%A4%A7%E5%85%A8%22%5D'
}

form_data={
    'tn':'resultjson_com',
    'ipn':'rj',
    'word':'清風',
    'pn':90,
    'rn':30,
}
form_data=urllib.urlencode(form_data)
# 定義請求物件
request = urllib2.Request(url+form_data, headers=my_header)

# 傳送請求
response = urllib2.urlopen(request)

content = response.read()

url_list=re.findall('"thumbURL":"(.*?)"', content)
print(url_list)

for url in url_list:
    print("儲存圖片%s" % url)
    request = urllib2.Request(url, headers=my_header)
    response = urllib2.urlopen(request)
    img_url = url.replace("/", "_")
    with open('bd_img/' + img_url[-50:], "wb") as f:
        f.write(response.read())
    print("圖片%s儲存完成" % img_url)

三、自定義opener物件——爬蟲底層操作物件

1.為什麼要自定義opener物件

python內建模組提供了通用爬蟲可以操作的Opener物件,但是如果一旦涉及到自定義的針對各種特定環境的操作,python內建的Opener物件就不能滿足我們的需要了,例如客戶端和伺服器一直在做鬥爭的爬蟲~發爬蟲機制:

爬蟲~反爬蟲~伺服器為反爬蟲的變態做法:

1.封鎖IP

對應策略:反[反爬蟲(IP封鎖)]:使用代理伺服器(肉機),如果使用代理伺服器操作的情況下,python內建的opener物件就不能滿足我們的需要了

2.需要會話跟蹤才能訪問的URL地址[session-cookie]

對應策略(對cookie的操作):

①請求中包含cookie資料,可以手工抓包,將cookie資料直接新增到請求頭中,實現模擬登陸的情況!手工操作cookie資料~如果伺服器出現了即時cookie資料更新,手工操作cookie的的方式就不會太友好了!~python內建的opener物件,不能滿足我們直接操作cookie的需求。

關於代理伺服器:

代理伺服器的型別:

透明代理:伺服器能清楚的檢視某個IP地址的客戶端通過某個IP地址的代理伺服器傳送了代理請求

匿名代理:伺服器能清楚的檢視到某個IP地址的代理伺服器發起了代理請求,但是檢視不到是哪個具體的客戶端

高匿代理:伺服器分不清這次請求是否代理髮送

常見的代理伺服器:

免費:提供了代理ip地址和埠port可以免費使用,但是網速一般較慢,存活時間沒有保障

收費:提供了代理ip地址和埠port,並且結合賬號+密碼登入之後才能連線使用,收費的代理~穩定、網速一般較快、動態IP地址跳躍等等

在程式中對於cookie的操作,這就需要我們自定義opener物件,使用python內建了cookielib模組,可以針對請求cookie進行讀寫操作

實現在程式中自動獲取cookie

CookieJar核心模組

FileCookieJar核心模組(繼承自上面)

MozillaCookieJar核心模組(繼承自上面)

cookie資料直接操作

cookie資料讀寫操作

2.簡單的自定義opener物件的例子

# -*- coding:utf-8 -*-
'''
自定義opener物件的小程式,以爬取"https://www.taobao.com"為例'''
# 引入需要的模組
import urllib2

# 定義訪問路由
url='https://www.taobao.com'
# 定義請求頭
my_header={'User-Agent':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}

# 根據請求地址,定義請求物件
request=urllib2.Request(url,headers=my_header)

# 建立一個自定義的handler物件,操作控制httphandler物件
http_handler=urllib2.HTTPHandler()

# 構建一個opener物件
http_opener=urllib2.build_opener(http_handler)

# 傳送請求
response=http_opener.open(request)
print response.read()
# -*- coding:utf-8 -*-
'''
自定義opener物件的小程式,以爬取"https://www.taobao.com"為例'''
# 引入需要的模組
import urllib2

# 定義訪問路由
url='https://www.taobao.com'
# 定義請求頭
my_header={'User-Agent':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}

# 根據請求地址,定義請求物件
request=urllib2.Request(url,headers=my_header)

# 建立一個自定義的handler物件,操作控制httphandler物件
http_handler=urllib2.HTTPHandler()

# 構建一個opener物件
http_opener=urllib2.build_opener(http_handler)

# 傳送請求
response=http_opener.open(request)
print response.read()

3.建立可以操作代理伺服器的opener物件

# -*- coding:utf-8 -*-
'''
建立可以操作代理伺服器的開鎖人(opener物件)
代理伺服器包括收費代理和免費代理,分為透明、匿名和高匿三種不同程度和型別的代理,這裡以免費代理為例。直接在網上搜索免費代理,可以搜到ip和埠
使用收費代理與免費代理相似,只是要加上登入名和密碼
免費:提供了代理ip地址和埠port可以免費使用,但是網速一般較慢,存活時間沒有保障
使用形式:"http":"ip地址:port"
收費:提供了代理ip地址和埠port,並且結合賬號+密碼登入之後才能連線使用,收費的代理~穩定、網速一般較快、動態IP地址跳躍等等
使用形式:"http":"賬戶名:密碼@ip地址:port"
'''
# 引入需要的模組
import urllib2

# 定義訪問的url地址
url = 'https://www.taobao.com'
# 定義請求頭
my_header = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}
# 根據定義的訪問地址,建立請求物件
request = urllib2.Request(url, headers=my_header)
# 建立可以操作代理伺服器的操作物件,這裡ProxyHandler是操作代理伺服器的操作物件,括號中可直接填寫代理伺服器的資訊
proxy_handler=urllib2.ProxyHandler({"http":"110.73.8.153:8123"})
# proxy_handler = urllib2.ProxyHandler({"http": "admin:[email protected]:8123"})
# 根據代理伺服器的操作物件,建立opener物件(開鎖人)
proxy_opener=urllib2.build_opener(proxy_handler)
response=proxy_opener.open(request)
print response.read()

4.對於opener物件的重新定義,使用python內建的cookielib模組,測試學習程式對cookie的操作。

# -*-coding:utf-8 -*-
# 引入需要的模組
import urllib2
import cookielib


# 定義訪問的url地址
url = 'https://www.taobao.com'
# 定義請求頭
my_header = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}

request=urllib2.Request(url,headers=my_header)
# 定義一個cookie核心物件
cookie=cookielib.CookieJar()
# 自定義一個handler物件,可以操作cookie
cookie_handler=urllib2.HTTPCookieProcessor(cookie)

# 定義opener
cookie_opener=urllib2.build_opener(cookie_handler)
# 傳送請求
response=cookie_opener.open(request)

# 這是一個小程式,專門用於測試cookielib模組對於cookie資料的操作
# 重點不在於獲取爬取的資料,而是在於cookie中的資料
for item in cookie:
    print("%s-%s" % (item.name, item.value))
    # "{} - {}".format("hello", "world")
'''列印結果:thw-cn
    '''
# -*-coding:utf-8 -*-
# 引入需要的模組
import urllib2
import cookielib


# 定義訪問的url地址
url = 'https://www.taobao.com'
# 定義請求頭
my_header = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}

request=urllib2.Request(url,headers=my_header)
# 定義一個cookie核心物件
cookie=cookielib.CookieJar()
# 自定義一個handler物件,可以操作cookie
cookie_handler=urllib2.HTTPCookieProcessor(cookie)

# 定義opener
cookie_opener=urllib2.build_opener(cookie_handler)
# 傳送請求
response=cookie_opener.open(request)

# 這是一個小程式,專門用於測試cookielib模組對於cookie資料的操作
# 重點不在於獲取爬取的資料,而是在於cookie中的資料
for item in cookie:
    print("%s-%s" % (item.name, item.value))
    # "{} - {}".format("hello", "world")
'''列印結果:thw-cn
    '''

4.對於opener物件的重新定義,使用python內建的cookielib模組,完成程式對於cookie的操作(直接獲取並儲存)

# -*-coding:utf-8 -*-
# 引入需要的模組
import urllib2
import cookielib

# 定義訪問的url地址
url = 'https://www.taobao.com'
# 定義請求頭
my_header = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}

# 定義請求物件
request=urllib2.Request(url,headers=my_header)
# 獲取cookie物件,使用MozillaCookieJar可以直接定義將cookie儲存所在的檔名及位置
cookie=cookielib.MozillaCookieJar("demo09.txt")
# 定義操作cookie的物件
cookie_handler=urllib2.HTTPCookieProcessor(cookie)
# 定義opener
cookie_opener=urllib2.build_opener(cookie_handler)
# 傳送請求
response=cookie_opener.open(request)
# 儲存cookie資料
cookie.save()


'''
檔案demo09.txt的內容如下:
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.
.taobao.com    TRUE   /  FALSE  1547039357 thw    cn
'''

5.對於opener物件的重新定義,使用python內建的cookielib模組,完成程式對於cookie的操作(直接操作使用上一步獲取的cookie)

# -*-coding:utf-8 -*-
# 引入需要的模組
import urllib2
import cookielib

# 定義訪問的url地址
url = 'https://www.taobao.com'
# 定義請求頭
my_header = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}

# 定義請求物件
request=urllib2.Request(url,headers=my_header)
# 獲取cookie物件,使用MozillaCookieJar,若需要儲存cookie資料,則括號中寫檔名,若是獲取cookie資料,則不寫
cookie=cookielib.MozillaCookieJar()
# 下載cookie資料
cookie.load('demo09.txt')
# 建立Handler操作物件
cookie_handler = urllib2.HTTPCookieProcessor(cookie)
# 建立opener物件
cookie_opener = urllib2.build_opener(cookie_handler)

# 訪問目標地址
response = cookie_opener.open(request)

print(response.read())

相關推薦

Python爬蟲請求請求代理以及cookie操作

·爬蟲程式urllib2模組底層操作; ·請求頭的設定和新增; ·請求代理的種類和型別; ·關於cookie的操作(手動新增/程式自動獲取) 一、爬蟲底層操作和請求頭的設定 1.demo01_爬蟲底層操作 雖然urllib2模組是爬蟲的底層操作,但並不是程式的底層

HttpServletRequest通過request獲得請求請求體等解決中文亂碼等問題

1、HttpServletRequest概述: 我們在建立Servlet時,會重寫service()方法、doGet()\、doPost()方法,這些方法都有兩個引數request(請求)和response(響應),service中的request是ServletRequset,而 doGet()和doP

http協議之請求方法請求請求體分析和Netty解析

請求報文 Http請求報文由三部分組成:請求行,請求頭,請求體 攜帶資訊 請求行:請求方法、請求地址、協議名稱和版本號 請求頭:Referer、User-Agent、Accept、Cookie、Cache-Control、Content-Length等屬性。Co

HTTP請求請求請求體詳解

引用 學習Web開發不好好學習HTTP報文,將會“打拳不練功,到老一場空”,你花在犯迷糊上的時間比你沉下心來學習HTTP的時間肯定會多很多。 HTTP請求報文解剖 HTTP請求報文由3部分組成(請求行+請求頭+請求體): 下面是一個實際的請求報文: ①是請求方法

HTTP請求報文(請求請求請求體)

HTTP協議 1.簡介 HTTP協議(Hyper Text Transfer Protocol,超文字傳輸協議),是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。 HTTP基於TCP/IP通訊協議來傳遞資料。 HT

http請求請求狀態碼http響應詳解

1.http請求頭HTTP客戶程式(例如瀏覽器),向伺服器傳送請求的時候必須指明請求型別(一般是GET或者POST)。如有必要,客戶程式還可以選擇傳送其他的請求頭。Accept:瀏覽器可接受的MIME型別。Accept-Charset:瀏覽器可接受的字符集。Accept-En

HTTP請求請求請求體小結

HTTP請求報文解剖HTTP請求報文由3部分組成(請求行+請求頭+請求體):下面是一個實際的請求報文:其中,1、2、3是請求行,分別是請求方法,資源名稱,HTTP版本號,4是請求頭,5是請求體細說:①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELET

Python基礎語法——迴圈佔位符以及字串操作

一、迴圈     昨天介簡單紹了for迴圈,今天看一下for迴圈和while迴圈的對比。     1.for迴圈        用for  in結構,index表示索引,range表示範圍。絕大部分情況下用for迴圈。for index in range(10) :

Nginx代理服務 - 代理緩衝區代理重新定義請求代理連線超時

1. 代理緩衝區 代理伺服器可以快取一些響應資料,來減少I/O損耗,資料預設儲存在記憶體中,當記憶體不夠時,會儲存到硬碟上。 proxy_buffering proxy_buffering這個引數用來控制是否開啟後端響應內容的緩衝區,如果這個設定為off,那麼proxy_buffers和

(二)Python爬蟲-----基礎頁面——headers請求

今天我們要講的是headers請求頭,這個通常是一些頁面用來分辨爬蟲的方法 requests庫可以通過加請求頭然後去請求頁面, 如下 import requests headers = {'User-Agent':'Mozilla/5.0 (Windows

Python爬蟲-02:HTTPS請求與響應,以及抓包工具Fiddler的使用

1. HTTP和HTTPS HTTP: 一種釋出和接受HTML頁面方法,埠號為80 HTTPS: HTTP的安全版,在HTTP上加入了SSL層,埠號為443 SSL: 用於Web的安全傳輸協議,在傳輸層對網路連線進行加密,保障在Internet上資料傳輸的安全 網路爬蟲可以理解為模擬瀏覽器操作的過程

Python爬蟲:將headers請求字串轉為字典

原生請求頭字串 raw_headers = """Host: open.tool.hexun.com Pragma: no-cache Cache-Control: no-cache User-A

HTTP請求響應詳解

HTTP的頭域包括通用頭、請求頭、響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成(說白了就是鍵值對)。 通用頭:是客戶端和伺服器都可以使用的頭部,可以在客戶端、伺服器和其他應用程式之間提供一些非常有用的通用功能,如Date頭部。 請求頭:是請求報文特有的,它們

python爬蟲(二)_HTTP的請求和響應 python爬蟲(二)_HTTP的請求和響應

python爬蟲(二)_HTTP的請求和響應 HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文字傳輸協議):是一種釋出和接收HTML頁面的方法 HTTPS(HyperText Transfer Protocol over Secure Socket

python爬蟲(二)_HTTP的請求和響應

internet pan ESS 郵件 將在 資源定位 回復 資源文件 所在地 HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本傳輸協議):是一種發布和接收HTML頁面的方法 HTTPS(HyperText Transfer

HTTP請求響應引數說明

Requests Header | Http Header Header 解釋 示例 Accept 指定客戶端能夠接收的內容型別 Accept: text/plain, text/html

Shiro在請求中獲取sessionId以及rememberMe資訊

本文介紹的內容需要對Shiro有一定了解,學習Shiro可檢視跟開濤我學Shiro 解決問題步驟 重寫 DefaultWebSessionManager 命名為 DefaultHeaderSessionManager; 重寫 CookieRemembe

Http協議請求響應響應碼

必須 響應 coo tab ron 內部錯誤 serve 接口 body Http部分請求頭 Accept 客戶機通過這個頭,告訴服務器,它支持哪些數據類型 Accept-Charset 客戶機通過這個頭,告訴服務器,它支持的編碼 Accept-Encoding

Flask第二天-偏函式LocalStack請求上下文websocket簡介以及實現單聊和群聊功能

    1.偏函式         from functools import partial              

Jmeter使用筆記(本文偏"介面測試工具")【GET/POST的HTTP請求請求響應斷言正則表示式提取器CSV讀取引數跨執行緒組傳遞變數】

一、執行一個HTTP請求自從畢業從事軟體測試行業,大多數時間都在跟各種API打交道,使用過的介面測試工具也有許多,本文記錄下各工具的使用心得,以及重點介紹我在工作中是如何使用Jmeter做測試的,都是在windows作業系統下進行。最開始使用postman,該工具的優點是可以