爬蟲 get方法 筆記

2021-10-07 08:35:40 字數 2733 閱讀 3162

指定乙個 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方法

# 獲取資料

# 狀態

print

(response._method)

print

(response.read())

# 讀取返回的內容

# print("\ninfo:")

# print(response.info()) # 返回頭資訊 headers

print

(response.geturl())

# 返回真正的url

print

(request.get_header(

'user-agent'))

print

(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則不會再 上顯示所有引數,不過如果你想直接檢視提交了什麼就不太...