python 3.4 爬蟲,偽裝瀏覽器(403 Forbidden)


在使用python抓取網頁圖片的時候,偶爾會遇到403錯誤。這可能是因為服務器禁止了爬蟲。這種情況下如果想繼續爬取圖片的時候,就需要在請求中加入header信息,偽裝成瀏覽器。

如果你使用的是python3.4版本,那么如果你想在網上找到在請求中加入header的方法,估計要費些周折。經過一番實驗,確定下面的代碼是可以的。

'''
Created on 2014-9-23

@author: holiday
'''
import urllib.request
import os


url = "http://img0.imgtn.bdimg.com/it/u=4054848240,1657436512&fm=21&gp=0.jpg"
# headers = [('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'),
# ('Accept','text/html;q=0.9,*/*;q=0.8'),
# ('Accept-Charset','ISO-8859-1,utf-8;q=0.7,*;q=0.3'),
# ('Accept-Encoding','gzip'),
# ('Connection','close'),
# ('Referer',None )]#注意如果依然不能抓取的話,這里可以設置抓取網站的host
headers = [('Host','img0.imgtn.bdimg.com'),
('Connection', 'keep-alive'),
('Cache-Control', 'max-age=0'),
('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'),
('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'),
('Accept-Encoding','gzip,deflate,sdch'),
('Accept-Language', 'zh-CN,zh;q=0.8'),
('If-None-Match', '90101f995236651aa74454922de2ad74'),
('Referer','http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&word=%E4%BA%A4%E9%80%9A&ie=utf-8'),
('If-Modified-Since', 'Thu, 01 Jan 1970 00:00:00 GMT')]


opener = urllib.request.build_opener()
opener.addheaders = headers
data = opener.open(url)

# print(data)

path = "c:/151.jpg"  
f = open(path,"wb")  
f.write(data.read())  
f.close()

值得慶幸的是,這里面還加入了下載的部分。所訪問的圖片會保存在c盤下的151.jpg。

值得注意的是

('Referer','http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&word=%E4%BA%A4%E9%80%9A&ie=utf-8'),

頭中的這行代碼告訴了服務器我是從這個頁面跳轉過去的。(這當然不是真的)然后騙過服務器。

一開始就因為這句話沒加一直沒有成功。


免責聲明!

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



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