1.設(shè)置Headers
有些網(wǎng)站不會(huì)同意程序直接用上面的方式進(jìn)行訪問渠旁,如果識(shí)別有問題烫映,那么站點(diǎn)根本不會(huì)響應(yīng)业扒,所以為了完全模擬瀏覽器的工作捎废,我們需要設(shè)置一些Headers 的屬性。
首先胀糜,打開我們的瀏覽器颅拦,調(diào)試瀏覽器F12,我用的是Chrome教藻,打開網(wǎng)絡(luò)監(jiān)聽距帅,示意如下,比如知乎括堤,點(diǎn)登錄之后碌秸,我們會(huì)發(fā)現(xiàn)登陸之后界面都變化 了,出現(xiàn)一個(gè)新的界面悄窃,實(shí)質(zhì)上這個(gè)頁面包含了許許多多的內(nèi)容讥电,這些內(nèi)容也不是一次性就加載完成的,實(shí)質(zhì)上是執(zhí)行了好多次請(qǐng)求轧抗,一般是首先請(qǐng)求HTML文 件恩敌,然后加載JS,CSS 等等横媚,經(jīng)過多次請(qǐng)求之后纠炮,網(wǎng)頁的骨架和肌肉全了,整個(gè)網(wǎng)頁的效果也就出來了灯蝴。
拆分這些請(qǐng)求恢口,我們只看一第一個(gè)請(qǐng)求,你可以看到穷躁,有個(gè)Request URL耕肩,還有headers,下面便是response,圖片顯示得不全猿诸,小伙伴們可以親身實(shí)驗(yàn)一下婚被。那么這個(gè)頭中包含了許許多多是信息,有文件編碼啦两芳,壓縮方式啦摔寨,請(qǐng)求的agent啦等等。
其中怖辆,agent就是請(qǐng)求的身份是复,如果沒有寫入請(qǐng)求身份,那么服務(wù)器不一定會(huì)響應(yīng)竖螃,所以可以在headers中設(shè)置agent,例如下面的例子淑廊,這個(gè)例子只是說明了怎樣設(shè)置的headers,小伙伴們看一下設(shè)置格式就好特咆。
importurllib
importurllib2
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()
這樣季惩,我們?cè)O(shè)置了一個(gè)headers,在構(gòu)建request時(shí)傳入腻格,在請(qǐng)求時(shí)画拾,就加入了headers傳送,服務(wù)器若識(shí)別了是瀏覽器發(fā)來的請(qǐng)求菜职,就會(huì)得到響應(yīng)青抛。
另外,我們還有對(duì)付”反盜鏈”的方式酬核,對(duì)付防盜鏈蜜另,服務(wù)器會(huì)識(shí)別headers中的referer是不是它自己,如果不是嫡意,有的服務(wù)器不會(huì)響應(yīng)举瑰,所以我們還可以在headers中加入referer
例如我們可以構(gòu)建下面的headers
headers={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Referer':'http://www.zhihu.com/articles'}