爬蟲小試(3)

2021-10-07 17:18:43 字數 2641 閱讀 6337

怎樣扒網頁呢?

其實就是根據url來獲取它的網頁資訊,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由瀏覽器解釋才呈現出來的,實質它是一段html**,加 js、css,如果把網頁比作乙個人,那麼html便是他的骨架,js便是他的肌肉,css便是它的衣服。所以最重要的部分是存在於html中的,下面我們就寫個例子來扒乙個網頁下來

from urllib.request import urlopen

response = urlopen("")

print(response.read().decode())

真正的程式就兩行,執行如下命令檢視執行結果,感受一下

看,這個網頁的原始碼已經被我們扒下來了,是不是很酸爽?

response.read()

response.getcode()

response.geturl()

response.info()

其實上面的urlopen引數可以傳入乙個request請求,它其實就是乙個request類的例項,構造時需要傳入url,data等等的內容。比如上面的兩行**,我們可以這麼改寫

from urllib.request import urlopen

from urllib.request import request

request = request("")

response = urlopen(requst)

print response.read().decode()

執行結果是完全一樣的,只不過中間多了乙個request物件,推薦大家這麼寫,因為在構建請求時還需要加入好多內容,通過構建乙個request,伺服器響應請求得到應答,這樣顯得邏輯上清晰明確

大部分被傳輸到瀏覽器的html,images,js,css, … 都是通過get方法發出請求的。它是獲取資料的主要方法

例如:www.baidu.com 搜尋

get請求的引數都是在url中體現的,如果有中文,需要轉碼,這時我們可使用

我們說了request請求物件的裡有data引數,它就是用在post裡的,我們要傳送的資料就是這個引數data,data是乙個字典,裡面要匹配鍵值對

傳送請求/響應header頭的含義:

名稱含義

accept

告訴伺服器,客戶端支援的資料型別

accept-charset

告訴伺服器,客戶端採用的編碼

accept-encoding

告訴伺服器,客戶機支援的資料壓縮格式

accept-language

告訴伺服器,客戶機的語言環境

host

客戶機通過這個頭告訴伺服器,想訪問的主機名

if-modified-since

客戶機通過這個頭告訴伺服器,資源的快取時間

referer

客戶機通過這個頭告訴伺服器,它是從哪個資源來訪問伺服器的。(一般用於防盜煉)

user-agent

客戶機通過這個頭告訴伺服器,客戶機的軟體環境

cookie

客戶機通過這個頭告訴伺服器,可以向伺服器帶資料

refresh

伺服器通過這個頭,告訴瀏覽器隔多長時間重新整理一次

content-type

伺服器通過這個頭,回送資料的型別

content-language

伺服器通過這個頭,告訴伺服器的語言環境

server

伺服器通過這個頭,告訴瀏覽器伺服器的型別

content-encoding

伺服器通過這個頭,告訴瀏覽器資料採用的壓縮格式

content-length

伺服器通過這個頭,告訴瀏覽器回送資料的長度

響應狀態碼

響應狀態**有三位數字組成,第乙個數字定義了響應的類別,且有五種可能取值。

常見狀態碼:

號碼含義

100~199

表示伺服器成功接收部分請求,要求客戶端繼續提交其餘請求才能完成整個處理過程

200~299

表示伺服器成功接收請求並已完成整個處理過程。常用200(ok 請求成功)

300~399

400~499

客戶端的請求有錯誤,常用404(伺服器無法找到被請求的頁面)、403(伺服器拒絕訪問,許可權不夠)

500~599

伺服器端出現錯誤,常用500(請求未完成。伺服器遇到不可預知的情況)

有些網頁內容使用ajax載入,而ajax一般返回的是json,直接對ajax位址進行post或get,就返回json資料了

現在隨處可見 https 開頭的**,urllib可以為 https 請求驗證ssl證書,就像web瀏覽器一樣,如果**的ssl證書是經過ca認證的,則能夠正常訪問,如:

如果ssl證書驗證不通過,或者作業系統不信任伺服器的安全證書,比如瀏覽器在訪問12306**如:的時候,會警告使用者證書不受信任。(據說 12306 **證書是自己做的,沒有通過ca認證)

# 忽略ssl安全認證

context = ssl._create_unverified_context()

# 新增到context引數裡

response = urllib.request.urlopen(request, context = context)

Python3爬蟲(1)小試牛刀

最近學習了python3的爬蟲機制!也就是通過使用urllib模組傳送http請求來獲取網頁的html原始碼,然後使用正則匹配出自己想要收集的資訊!注意python2中所用的模組不一樣 下面小試牛刀,做了乙個例子!附上需求和原始碼!儲存形式 將從網頁上獲取到的資訊分行寫入.txt檔案中 邏輯 引入u...

小試3解析

確實需要思考。1.傳球 細加分析即可知結果為c 3,n include includeusing namespace std int n int main 2.矩形交換 顯然直接模擬是不可取的。我們可以令a i i,表示第i行是原先的第a i 行 那麼在交換行的時候,我們只需交換對應的a的值即可。i...

Python基礎學習 爬蟲小試2

import urllib.parse import urllib.request data urllib.parse.urlencode url request urllib.request.request url data response urllib.request.urlopen requ...