您好,登錄后才能下訂單哦!
urllib/urllib2默認的User-Agent是Python-urllib/2.7,容易被檢查到是爬蟲,所以我們要構造一個請求對象,要用到request方法。
1.查看Header信息
2.設置User-Agent模仿瀏覽器訪問數據
Request總共三個參數,除了必須要有url參數,還有下面兩個:
data(默認空):是伴隨 url 提交的數據(比如要post的數據),同時 HTTP 請求將從 "GET"方式 改為 "POST"方式。
headers(默認空):是一個字典,包含了需要發送的HTTP報頭的鍵值對
# _*_ coding:utf-8 _*_
import urllib2
# User-Agent是爬蟲與反爬蟲的第一步
ua_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
# 通過urllib2.Request()方法構造一個請求對象
request = urllib2.Request('http://www.baidu.com/',headers=ua_headers)
#向指定的url地址發送請求,并返回服務器響應的類文件對象
response = urllib2.urlopen(request)
# 服務器返回的類文件對象支持python文件對象的操作方法
# read()方法就是讀取文件里的全部內容,返回字符串
html = response.read()
print html
3.選擇隨機的Use-Agent
為了防止封IP,先生成一個user-agent列表,然后從中隨機選擇一個
# _*_ coding:utf-8 _*_
import urllib2
import random
url = 'http:/www.baidu.com/'
# 可以試User-Agent列表,也可以是代理列表
ua_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
# 在User-Agent列表中隨機選擇一個User-Agent
user_agent = random.choice(ua_list)
# 構造一個請求
request = urllib2.Request(url)
# add_header()方法添加/修改一個HTTP報頭
request.add_header('User-Agent',user_agent)
#get_header()獲取一個已有的HTTP報頭的值,注意只能第一個字母大寫,后面的要小寫
print request.get_header('User-agent')
4.urllib和urllib2的主要區別
urllib和urllib2都是接受URL請求的相關模塊,但是提供了不同的功能,最顯著的區別如下:
(1)urllib僅可以接受URL,不能創建,設置headers的request類實例;
(2)但是urllib提供urlencode()方法用來GET查詢字符串的產生,而urllib2則沒有(這是urllib和urllib2經常一起使用的主要原因)
(3)編碼工作使用urllib的urlencode()函數,幫我們講key:value這樣的鍵值對轉換成‘key=value’這樣的字符串,解碼工作可以使用urllib的unquote()
函數
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。