指定乙個 robots.txt 協議,告訴爬蟲引擎什麼可以爬取
例如:user-agent: *
所用使用者
disallow: /
不允許爬取任何內容
不允許任何爬蟲爬取任何內容
urllib.request 用於開啟和讀寫url
urllib.error 包含了由 urllib.request 引起的異常
urllib.parse 用於解析url
urllib.robotparser 用於分析robots.txt檔案
urlopen(url, data=none)
url為鏈結位址的字串或請求物件
data為提交的資料,如果data為none發起get請求,否則發起post請求
urlopen()返回的是乙個http.client.httpresponse類的響應請求,這是乙個類檔案物件。
爬蟲向瀏覽器傳送的請求中包含爬蟲的user-agent資訊,如果不加以修改,**就會識別出爬蟲,並阻止其爬取網頁資訊,所以要通過request類來進行偽裝。
# urllib.request.openerdirector
class
openerdirector
:def
__init__
(self)
: client_version =
"python-urllib/%s"
% __version__
self.addheaders =[(
'user-agent'
, client_version)
]
另外,通過檢視request源**可以知道,request預設的ua為:python-urllib/3.6 要是不加偽裝很容易被識別為爬蟲
request(url, data=none, headers={})
request類傳遞的引數與urlopen相似,其中headers為可以定製的請求頭預設為字典,所以headers的賦值應當為鍵值對
不進行偽裝的請求:
# 在 ua_list 中隨機選取乙個user_agent
request = request(url)
request.add_header(
'user-agent'
, random.choice(ua_list)
)# 使用ua來偽裝爬蟲,向**聲稱自己是ua所代表的瀏覽器
# urlopen(url, date=none)
# url是鏈結位址字串,或請求物件。
# date為請求資料,如果date為none則發起get請求,否則發起post請求
# 預設為none
response = urlopen(request, timeout=5)
# 通過 urlopen 方法,發起乙個http的get請求,web伺服器返回了網頁內容。相應
# 的資料被封裝到類檔案物件中,可以通過read方法、readline方法、readlines方法
# 獲取資料
# 狀態
(response._method)
(response.read())
# 讀取返回的內容
# print("\ninfo:")
# print(response.info()) # 返回頭資訊 headers
(response.geturl())
# 返回真正的url
(request.get_header(
'user-agent'))
(response.closed)步驟:
編寫 url、ua,確定訪問物件和進行偽裝
request(url, headers={})製作請求頭,將url,ua作為引數傳入
urlopen(request, timeout)對**傳送請求,返回乙個類檔案物件
讀取資訊
Python爬蟲,get方法的封裝
這裡比較規範的使用了工程化的思想,考慮了日誌的編寫 爬蟲傳送get請求時,則考慮了ua等http request head部分的設定 並且支援 伺服器的資訊處理 返回的狀態碼不是200時的處理 並且考慮了超時問題,及網頁的編碼問題 import sys import logging import u...
Python爬蟲中的Get和Post方法
通俗的說,get是直接請求 開啟,post是請求 對方通過後才能開啟。get和post最重要的區別是,get方式是直接一鏈結形式訪問,鏈結中包含了所有的引數,當然如果包含了密碼什麼的是不安全的,不過你可以直觀的看到自己提交的內容。post則不會再 上顯示所有引數,不過如果你想直接檢視提交了什麼就不太...
Python爬蟲中的Get和Post方法
通俗的說,get是直接請求 開啟,post是請求 對方通過後才能開啟。get和post最重要的區別是,get方式是直接一鏈結形式訪問,鏈結中包含了所有的引數,當然如果包含了密碼什麼的是不安全的,不過你可以直觀的看到自己提交的內容。post則不會再 上顯示所有引數,不過如果你想直接檢視提交了什麼就不太...