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) #使用urllib2的urlopen函式傳送請求物件 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) # 使用urllib2的urlopen函式傳送請求物件 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物件,操作控制http的handler物件 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物件,操作控制http的handler物件 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,該工具的優點是可以