**寫在最前面!??!本文只適合小白看,大牛就不用圍觀了,非要圍觀的也請槽點輕吐**
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------爬蟲的基本流程 -----
發(fā)起請求
通過HTTP庫向目標站點發(fā)起請求,也就是發(fā)送一個Request,請求可以包含額外的header等信息,等待服務器響應?
獲取響應內(nèi)容
如果服務器能正常響應,會得到一個Response,Response的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能是HTML,Json字符串,二進制數(shù)據(jù)(圖片或者視頻)等類型?
解析內(nèi)容
得到的內(nèi)容可能是HTML,可以用正則表達式,頁面解析庫進行解析,可能是Json,可以直接轉(zhuǎn)換為Json對象解析,可能是二進制數(shù)據(jù),可以做保存或者進一步的處理 - 保存數(shù)據(jù)保存形式多樣,可以存為文本,也可以保存到數(shù)據(jù)庫,或者保存特定格式的文件
接下來我將以爬取網(wǎng)易云為例一步一步進行上述步驟的實現(xiàn)**本爬蟲基于Python 3.x? ? IDE為 pycharm
Requests —抓取網(wǎng)頁內(nèi)容
Requeest中主要用到兩類方法:Request和Response
什么是Request,Response
瀏覽器發(fā)送消息給網(wǎng)址所在的服務器,這個過程就叫做HTPP Request服務器收到瀏覽器發(fā)送的消息后,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容,做相應的處理,然后把消息回傳給瀏覽器,這個過程就是HTTP Response瀏覽器收到服務器的Response信息后,會對信息進行相應的處理
然后展示主要爬取方法:
requests.get()包含參數(shù):
url--即統(tǒng)一資源定位符,也就是我們說的網(wǎng)址
params--請求參數(shù),即網(wǎng)頁鏈接"?"后的參數(shù)
headers--請求頭的所有信息
proxies--代理信息
接下來我們試一試最簡單的爬取
import requests
a = requests.get('http://music.163.com/#/artist?id=13193')
print(a.status_code,a.text)
status_code表示狀態(tài)碼(這里為200)? text表示數(shù)據(jù)為文本類型結(jié)果返回的是網(wǎng)頁的源代碼

代碼過長? 所以中間切了很多 然后,你會發(fā)現(xiàn)有些網(wǎng)頁會識別出程序爬取網(wǎng)頁信息
所以我們需要模擬瀏覽器登陸獲取網(wǎng)頁信息這就需要用到前面介紹的參數(shù)了具體的請求頭信息在瀏覽器中F12查看(這里以火狐瀏覽器為例)在左側(cè)訪問記錄中,找到“200 http://music.163.com/#/artist?id=13193”這一條,點擊查看其對應的請求和響應報頭具體內(nèi)容:

包含請求時的頭部信息,如User-Agent,Host,Cookies等信息
接下來,在爬蟲代碼里自定義網(wǎng)頁請求報頭:代碼很簡單
import requests
a = ('http://music.163.com/#/artist?id=13193')
header = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0'}
url_a = requests.get(url = a,headers = header)
print(url_a.status_code,url_a.text)```
爬取出來的結(jié)果和上面一樣,不過偽裝成了模擬器登陸獲取。