MOOC 北理 python爬蟲學習

2021-10-05 23:06:27 字數 3961 閱讀 3130

對一般伺服器,對爬蟲限制有:

**審查。 檢查http協議頭,判斷user-agent進行限制。只響應瀏覽器和友好爬蟲的訪問。

robots協議。在**根目錄下的robots.txt檔案中。建議,但非約束性。若訪問量很小,不對伺服器造成影響,和人類訪問行為類似,可以不參考robots協議。 如京東的robots協議:

/ 代表根目錄 * 代表所有 如: user-agent: * disallow:/

1. 京東、亞馬遜商品頁面的爬取。

爬取京東裡inter cpu的商品資訊。

>>

>

import requests

>>

> url =

"">>

> r = requests.get(url)

>>

> r.status_code

200>>

> r.encoding

'utf-8'

>>

'ascii'

>>

>>

> r.text[

:1000]""

#這裡出現了問題。然鵝我也不知道咋回事,慕課裡面都沒有問題誒。。。然後查閱csdn別人的部落格後發現是要調整headers,所以接下來是。

>>

> kv =

>>

> r = requests.get(url,headers = kv)

>>

> r.text[

:1000

]'''這裡沒有用標準框架。'''

好吧。但是這個問題好像在下一節「爬取亞馬遜商品資訊」的課程中得到解決。

>>

> r.status_code

503>>

> r.request.headers

這裡user-agent欄位顯示的是』python-requests/2.23.0』,說明python很老實地告訴伺服器我這個是爬蟲。然後伺服器害怕這個爬蟲幹壞事,就加以阻攔。所以我們需要進行修改。

>>

> kv =

>>

> r = requests.get(url,headers = kv)

>>

> r.status_code

200>>

> r.request.headers

這時候就可以偽裝成其他瀏覽器了。就能爬取到相應的內容。

但是有點區別,就是爬取亞馬遜商品status_code 是503,然而上面那個爬取京東商品status_code是200 。而且亞馬遜商品text裡的內容是有顯示要求輸入驗證碼,京東的text就是一行很短的資訊。

但總之,這兩個的原因都是出在 headers上。更改headers就能爬取資訊了。

>>

>

import requests

>>

> kv =

>>

> url =

''>>

> r = requests.get(url,params = kv)

>>

> r.status_code

200>>

> r.request.url

>>

>

len(r.text)

1519

以上是自己電腦上執行結果,和課堂上老師執行結果還是有很大的不同

>>

> kv =

>>

> url =

''>>

> r = requests.get(url,params = kv)

>>

> r.request.url

''>>

>

3. 網路的爬取和儲存

網路鏈結的格式:

然後就遇到問題了。。課程裡說右鍵,會有屬性。。。。然而我這邊根本沒有啥屬性。。。我裂開。但硬著頭皮把課程看完。。。

'北京/xgtupian/2/4?target=a2_57_51_01200000000481118595150813357.jpg'

>>

> r = requests.get(url)

>>

> r.status_code

200>>

>

with

open

(path,

'wb'

)as f:

f.write(r.content)

15555

'''response物件 r.content表示返回物件的二進位制形式。所以我們可以用f.write(r.content)將返回二進位制形式寫入檔案中'''

>>

> f.close(

)#關閉檔案。但這個儲存失敗了。。。檔案不支援格式。

下面是課程中的**,很給力。

import requests

import os

url =

""root =

"d://pics//"

path = root + url.split(

'/')[-

1]try:

ifnot os.path.exists(root)

:#判斷是否存在根目錄。

os.mkdir(root)

#如果根目錄不存在,則建立乙個。

ifnot os.path.exists(path)

:#判斷是否已經存在。

r = requests.get(url)

with

open

(path,

'wb'

)as f:

f.write(r.content)

f.close(

)print

("檔案儲存成功"

)else

:print

("檔案已存在"

)except

:print

("爬取失敗"

)

4. ip位址歸屬地的自動查詢。

ip138網頁可以查詢ip位址所在地。

輸入ip位址後url發生變化,變為:iplookup.asp?ip=39.181.187.119&action=2

然後根據發生的變化來通過python爬取資訊。

但自己嘗試的時候發生了錯誤 error [errno 11001] getaddrinfo failed ,和之前的不同,之前都是死在text上,然而這個是在get上直接死掉。。。。查閱他人部落格發現是網頁失效。可能是這個網頁設定了什麼高階的反爬技術?不懂3

課堂裡的**:

import requests

url =

""r = requests.get(url+

'******'

)r.status_code

r.text[

-500

:]

**

問題:

ip位址查詢位址失效,直接死在 r = requests.get 上。

其他:

5.9日開始記錄部落格。希望能堅持下去。既是筆記也是分享。(然而我感覺我寫的東西應該只有自己會看,也只有自己看得懂。。。邏輯極其混亂)python爬蟲學習是第乙個板塊。已經記錄的1、2是課程中第一周的內容,由於之前三月份的時候看過一遍,現在相當於複習。程序相對較快,乙個週末就補完了。接下來希望能繼續堅持,每天收穫一點。

Python網路爬蟲與資訊提取MOOC學習 預備

一 ide 概念 integrated development environment整合開發環境 提供了程式開發環境的應用程式,一般包括 編輯器 編譯器 偵錯程式和圖形使用者介面等工具。整合了 編寫功能 分析功能 編譯功能 除錯功能等一體化的開發軟體服務套。二 python的ide分類 文字工具類...

Python爬蟲http https協議(理論)

立即學習 http協議 概念 就是伺服器和客服端進行資料互動的一種形式。常用請求頭資訊 user agent 請求載體的身份標識 connection 請求完畢後,是斷開連線還是保持連線 常用響應頭資訊 content type 伺服器響應回客戶端的資料型別 https協議 安全的http協議 超文...

python爬蟲小程式 python爬蟲學習小程式

coding utf 8 name 模組1 purpose author mrwang created 18 04 2014 licence import urllib def main url html urllib.urlopen url print html.read 讀取內容 print h...