天天看點

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

爬蟲的基本原理和基本庫使用

爬蟲簡單來說就是擷取網頁并提取和儲存資訊的自動化程式。

擷取網頁

擷取網頁的源代碼:向網站的伺服器發送一個請求,傳回的響應體便是網頁源代碼。

提取資訊

分析網頁源代碼,從中提取我們想要的資料。最通用的方式便是采用正規表達式提取

儲存資料

将提取到的資料儲存到某處以便以後使用

自動化程式

利用爬蟲代替我們完成這份爬取工作的自動化程式

爬蟲過程中遇到的一些情況:比如403錯誤,打開網頁一看,可能會看到"您的ip通路頻率過高"這樣提示,是因為網站采用了一些反爬蟲的措施,這個時候我們可以使用代理,所謂的代理,就是代理伺服器,就是一個網絡資訊的中轉站,正常請求一個網站的時候,是發送給web伺服器,web伺服器吧響應傳回給我們,如果我們設定了代理伺服器,就相當于本機和伺服器之間搭了一座橋,本機向代理伺服器發送請求,再由代理伺服器發送給Web伺服器。再由代理伺服器把web伺服器傳回的響應轉發本機,這樣我們就實作了IP僞裝

網上免費代理比較多,但最好篩選一下可用代理,付費的品質會比免費代理好很多

然後我們正式來開始學習爬蟲的一些基本使用庫(python3環境),這裡我們用的是pycharm軟體

使用urllib

Urlopen

Urllib.request子產品提供了最基本的構造HTTP請求的方法,可以利用它模拟浏覽器一個請求發起的過程,這裡我們以python官網為例

import urllib.requestresponse=urllib.request.urlopen('https://www.python.org')print(response.read().decode('utf-8'))

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

這樣我們就完成了python官網的抓取

2.Type

然後我們可以用type()方法輸出響應的類型

import urllib.requestresponse=urllib.request.urlopen('https://www.python.org')print(type(response))

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

可以發現他是一個HTTPResponse類型對象,主要包含read(),readinto(),getheader(name),getheaders()等方法。

我們可以把它指派為response變量,然後就可以調用這些方法和屬性,得到傳回結果的一系列資訊了

例如:

import urllib.requestresponse=urllib.request.urlopen('https://www.python.org')print(response.status)

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

傳回200代表請求成功,在本篇文章末尾會有一張狀态碼表,可以進行對照

import urllib.requestresponse=urllib.request.urlopen('https://www.python.org')print(response.getheaders())

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

輸出響應的狀态碼和響應的頭資訊import urllib.requestresponse=urllib.request.urlopen('https://www.python.org')print(response.getheader('Server'))

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

傳遞了一個server值擷取了響應頭中的server值,傳回的意思是伺服器用nginx搭建的

如果想給連結傳一些參數:

DATA參數:如果添加該函數,需要使用byte()方法将參數轉化為位元組流編碼格式的内容,如果傳遞了這個函數,則它的請求方式就不是GET方式,而是POST方式,這裡我們請求站點是http://httpbin.org/post,他可以測試post

import parseimport urllib.requestdata=bytes(urllib.parse.urlencode({'word':'Hello'}),encoding='utf-8')#将字元轉化為字元串response=urllib.request.urlopen('http://httpbin.org/post',data=data)print(response.read())

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

可以看到我們傳遞的參數在form字段中

timeout參數:用于設定逾時時間(s),如果超出設定的時間沒有得到相應,就會抛出異常,不指定參數就會使用全局預設時間

import urllib.requestresponse=urllib.request.urlopen('http://httpbin.org/get',timeout=1)print(response.read())

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

因為我們設定的時間1秒,超過1秒後伺服器沒響應,是以抛出異常

是以我們可以設定這個逾時時間來控制一個網頁長時間沒有響應後,就跳過它的抓取

import socketimport urllib.requestimport urllib.errortry: response=urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)except urllib.error.URLError as e: if isinstance(e.reason,socket.timeout): print('TIME OUT')

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

設定時間為0.1s,因為太短了得不到伺服器響應,是以列印timeout

Request

我們知道利用urlopen()方法可以實作最基本的請求發起,但這幾個簡單參數不足以建構個完整的請求,如果請求中需要加入Headers等資訊,可以利用Request來建構

from urllib import request,parseurl='http://httpbin.org/post'headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)','Host':'httpbin.org'}dict={ 'name' :'Germey'}data=bytes(parse.urlencode(dict),encoding='utf-8')req=request.Request(url=url,headers=headers,method='POST')response=request.urlopen(req)print(response.read().decode('utf-8'))

構造了四個函數,url即請求URL,headers中置頂了User=Agent和HOST,參數data用urlencode()和bytes()方法轉成了位元組流,另指定了POST

爬蟲500 internal server error_爬蟲的基本原理和基本庫使用

我們成功設定了data,headers和method

最後喜歡我文章的朋友請加圈子關注我們,加我們的qq群:251573549

每天都會更新資訊安全福利給大家哦,小編也會在群裡一一為大家解決問題