不跳步驟的新手python爬蟲教程(二)

    代碼不是看出來的,而是敲出來的,歡迎關注公衆號,收藏教程,跟着步驟練習爬蟲,成爲真正的Spider Man。 

   在第一篇教程裏(不跳步驟新手python爬蟲教程(一))我們學習了安裝python、運行python、下載IDE: Pycharm(代碼編輯器)以及瀏覽器的網絡請求等相關知識內容,下面緊接着開始爬蟲第二篇教程的學習。

步驟一:認識http、https

    HTTP:超文本傳輸協議。以明文形式傳輸,效率高,不安全。而HTTPS:HTTP+SSL(安全套接字層)。SSL證書需要購買申請,功能越強大的證書費用越高。傳輸數據前先加密,接收數據後解密獲取內容,效率低,更安全。http用的是80端口,而https用的是443端口。http報文格式如下圖:

步驟二:請求行與請求頭

    在Headers裏面我們可以看到當前請求網址的General中請求的Request URL地址、Request Method請求方法、Status Code狀態碼等信息以及Response Headers響應頭、Request Headers請求頭以及Query String請求參數。

    其中Request Method請求方法常見的有GET請求和POST請求。GET請求無請求體,POST請求有請求體。POST請求常用於登錄、註冊,傳輸大文本等(因爲POST請求可以攜帶比GET更大的數據量),例如翻譯網頁等。Status Code狀態碼常見的有 200(成功)服務器已成功處理了請求。400(錯誤請求)服務器不理解請求的語法。401(未授權)請求要求身份驗證。對於需要登錄的網頁,服務器可能返回此響應。403(禁止)服務器拒絕請求。404(未找到) 服務器找不到請求的網頁。 

    其中我們重點學習的是Request Headers,包括我們常見的請求行與請求頭。

    User-Agent(用戶代理):對方服務器通過user-agent知道請求對方資源的是什麼瀏覽器,或者說是不是瀏覽器,通過chrome可以模仿(模擬)手機版的網頁瀏覽,模仿時候,user-agent是改成手機版的。

    Accept:告訴服務端,我想接受什麼數據

    Accept-Encoding:告訴服務端我可以接受什麼編碼方式的數據。

    Accept-Language:告訴服務端我們希望接受什麼語言的數據。

    Cookie:用來存儲用戶信息的,每次請求都會被帶上發送給對方的瀏覽器。要獲取登陸後才能訪問的頁面的內容。對方的服務器會通過cookie來判斷爬蟲。

步驟三:requests模塊

    requests模塊是一個第三方模塊,所以我們首先需要安裝requests模塊。打開命令提示符窗口(鍵盤win鍵+R鍵,輸入cmd,點擊回車),敲入pip install requests進行下載。

    requests模塊的使用。首先,像許多別的python第三方模塊一樣,用之前,我們需要在代碼的第一行導包,輸入import request。第一次導包會報錯,在紅色燈泡中選擇第一行的install requests,這樣requests就安裝在pycharm當中了。

    發送GET、POST請求,獲取響應:

    response1 = requests.get(url)   #get請求,獲取響應

    response2 = requests.post(url,data = {請求體的字典})   #post請求,需要請求體

    這個時候,當我們直接print(response1)或者print(response2)的話,會得到一個<Response [200]> 其中200是狀態碼,如果學過HTTP知識的話,我們知道,這是一個代表正常訪問(200 OK)的狀態碼。

    下面以百度的首頁爲例:


import requests
url = "http://www.baidu.com"
response = requests.get(url)
print(response)

import requests
url = "http://www.baidu.com"
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
response = requests.get(url,headers=headers)
print(response)

response的方法:

    1.response.content.decode()此方法是把響應的二進制字節流轉化爲字符串類型

    2.response.text該方法獲取網頁內容時往往會出現亂碼,所以要在此前加上一個response.encoding = “utf-8”

    3.response.request.url獲取發送請求的url地址

    4.response.url獲取響應的url地址

    5.response.request.headers請求頭

    6.response.headers響應頭

獲取網頁原碼的方式:

    1.response.content.decode()

    2.response.content.decode(“gbk”)某些網站的 編碼方式不是使用的"utf-8"而是"gbk"

     3.response.text因爲.text方法是根據響應頭部的編碼進行推測,所以放到最後使用,有時候也會推測正確。當我們拿到一個網頁,用以上三種方式,一定可以獲取到網頁正確解碼方式的字符串

    下面以百度翻譯的頁面爲例:

# coding=utf-8
import requests
url = "http://fanyi.baidu.com/basetrans"
query_string = {"query":"你好,世界",
        "from":"zh",
        "to":"en"}
headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",}
response = requests.post(url,data=query_string,headers=headers)
print(response)
print(response.content.decode())
print(type(response.content.decode()))

運行結果如下:

關注公衆號【禿頭程序員】,不錯過不跳步驟的新手python爬蟲教程(

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章