溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python爬取準備三 urllib2模塊

發(fā)布時間:2020-07-08 18:27:32 來源:網(wǎng)絡(luò) 閱讀:184 作者:薩瓦迪迪卡 欄目:系統(tǒng)運維

urllib/urllib2默認的User-Agent是Python-urllib/2.7,容易被檢查到是爬蟲,所以我們要構(gòu)造一個請求對象,要用到request方法。

1.查看Header信息

python爬取準備三 urllib2模塊

2.設(shè)置User-Agent模仿瀏覽器訪問數(shù)據(jù)

Request總共三個參數(shù),除了必須要有url參數(shù),還有下面兩個:
data(默認空):是伴隨 url 提交的數(shù)據(jù)(比如要post的數(shù)據(jù)),同時 HTTP 請求將從 "GET"方式 改為 "POST"方式。
headers(默認空):是一個字典,包含了需要發(fā)送的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()方法構(gòu)造一個請求對象
request = urllib2.Request('http://www.baidu.com/',headers=ua_headers)
#向指定的url地址發(fā)送請求,并返回服務(wù)器響應(yīng)的類文件對象
response = urllib2.urlopen(request)
# 服務(wù)器返回的類文件對象支持python文件對象的操作方法
# read()方法就是讀取文件里的全部內(nèi)容,返回字符串
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)
# 構(gòu)造一個請求
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的主要區(qū)別

urllib和urllib2都是接受URL請求的相關(guān)模塊,但是提供了不同的功能,最顯著的區(qū)別如下:

(1)urllib僅可以接受URL,不能創(chuàng)建,設(shè)置headers的request類實例;

(2)但是urllib提供urlencode()方法用來GET查詢字符串的產(chǎn)生,而urllib2則沒有(這是urllib和urllib2經(jīng)常一起使用的主要原因)

(3)編碼工作使用urllib的urlencode()函數(shù),幫我們講key:value這樣的鍵值對轉(zhuǎn)換成‘key=value’這樣的字符串,解碼工作可以使用urllib的unquote()

函數(shù)

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI