一定要看,原來python爬蟲這麼簡單

現在python憑藉著人工智能越來越火,隨之而來的是網上打著python旗號騙錢的騙子。其實python很簡單。這也是python現在如此火的原因之一。所以大家學習python的時候,或者使用某個python庫的時候,可以先去網上找文章,對某個庫有個大概的瞭解。再去查閱官方文檔,這樣學起來非常快速,也非常全面。

廢話不多說,今天要給大家介紹的是python爬蟲。在看這篇文章之前,應該先了解python的基本語法。主要是瞭解基本的表達式,字典,列表,函數的使用就可以了。有了上述的準備接下來就是python爬蟲編程了。

首先,我們要知道什麼是爬蟲,很多人會說是從網頁中自動的抓取我們需要的信息。沒錯這是爬蟲的作用。用更加專業的說法是:模擬用戶行為,向web服務器發送數據,並且接收web服務器返回的數據,並對返回的數據進行提取,最後對爬取的數據進行保存。這就是爬蟲。根據上面我們對爬蟲的定義,因此我將編程爬蟲程序分為了三個步驟:

1.模擬用戶信息,向服務器發送請求。接收服務器發送的數據。

2.對數據進行提取。

3.保存你所提取的數據。

下面我們就分點陳述。第一點:模擬用戶信息,向服務器發送請求。接收服務器發送的數據。

這個過程我們主要使用的requests庫。這個庫功能強大,為我們封裝好了很多方法。當然在使用之前必須pip install requests。

import requests

htmlInfo = requests.get(url='https://api.github.com/events')
print(htmlInfo.status_code) # 獲取返回狀態
print(htmlInfo.text) #未解碼之前的網頁內容

當然光這樣向服務器發送請求,這隻對於簡單的網頁有效。很多網頁給你返回信息還需要你向服務器發送其他的信息。比如你的header信息,或者你的data信息。這對於requests庫來說同樣簡單。

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

其中params就是我們所說的data。params就是我們向服務器提交的數據。

http://httpbin.org/get?key2=value2&key1=value1

因為是get請求所以我們向服務器請求的網址如上。

requests可以在我們發送請求的時候為我們加上data,同樣能在我們的請求中加上header信息。headers是以字典的形式(鍵值對)。

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

想了解更多的requests信息請移步:http://2.python-requests.org/zh_CN/latest/user/quickstart.html

篇幅有限,上面就是requests的使用。下面我們關鍵講述如何發送header信息。由於爬蟲是機器訪問,速度很多,一些小站可以會因為爬蟲導致直接崩潰。所以很多站點都做了一些校驗。校驗該行為是真實用戶,還是爬蟲。在校驗的時候就是通過校驗頭部信息。

Accept: text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8 

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Cache-Control: max-age=0
Connection: keep-alive
Cookie: _zap=b42a2f12-0168-4c9d-b1ae-7…23469e9acd7d59c19eed2c2b6b67"
Host: www.zhihu.com
Referer: https://www.baidu.com/link?url…45f3fe00723d37000000065d746100
TE: Trailers
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/69.0

有時候web服務器的後臺會校驗User-Agent,或者其他的信息。你只需要在你的header中寫入就可以了。這個時候後臺就會為你的返回正常的網頁信息。第一步到此結束,我們獲取了正常的網頁內容。

第二步:對數據進行提取。這裡需要我們使用到正則表達式。學習地址如下:

https://www.runoob.com/python/python-reg-expressions.html

比如我們獲取網頁內容之後需要提取網頁中的圖片。

一定要看,原來python爬蟲這麼簡單

我們發現圖片的鏈接是以https開頭,jpg結尾。這個時候我們就可以利用正則表達則從網頁中提取這些鏈接。這個時候第二步我們就完成了。如果你覺得正則表達式很麻煩的話推薦你使用beautifulsoup。專為爬蟲而生,快速提取網頁內容。

第三步:保存內容,如果我們在第二步提取的內容是網頁的文字,我們可以直接將其寫入我們的本地文件,或者寫入數據庫。如果是圖片呢?

import urllib
imgUrl = 'http://xxx.jpg'
save_path = '/image/xxx.jpg'
f = urllib.urlopen(imgUrl)
with open(save_path, "wb") as code:
code.write(f.read())

致此全文結束。由於篇幅過長省略了一部分內容。只需按照上述步驟,即可完成非登錄網頁爬蟲的編寫。


分享到:


相關文章: