1.爬蟲的矛與盾
反爬機制:網站可以通過制定相應的策略或者技術手段,防止爬蟲進行網站數據的爬取
反反爬策略:爬蟲程序可以通過制定相關的策略或者技術手段,破解網站中具備的爬蟲機制,從而可以獲取網站中相關的數據。
robots協(xié)議:君子協(xié)議,規(guī)定了網站中那些頁面可以被爬蟲,哪些不行
根據協(xié)議,網站管理員可以在網站域名的根目錄下放一個robot.txt的文本文件,里面可以指定不同的網絡爬蟲能訪問的頁面和禁止的頁面。網絡爬蟲采集這個網站之前,可以先或者這個文件,然后解析里面的規(guī)則,最后根據規(guī)則來采集網頁數據
例如:https://www.bilibili.com/robots.txt

2.web請求全過程剖析
瀏覽器輸入網址到我們看到整個頁面的過程:
以百度為例。在訪問百度的時候,瀏覽器會把這次的請求送到百度服務器(百度的一臺電腦),由服務器收到這個請求,然后加載一些數據,返回給瀏覽器進行顯示。這里百度返回給瀏覽器的不是直接的頁面,而是頁面源代碼(由html,css,js組成)。由瀏覽器執(zhí)行頁面代碼,然后展示給用戶。具體過程如下

是否所有數據都在頁面源代碼中?否,這邊介紹下網頁渲染過程:
第一種:服務器渲染
就是我們請求到服務器的時候,服務器吧全部數據寫入到html中,我們?yōu)g覽器就能能拿到帶有數據的html內容。
如下:

由于數據直接寫在html中,我們能看到的數據都在頁面源代碼中。這種網頁一般都相對容器抓取。
第二種:客戶端渲染(前端js渲染)
這種機制一班是第一次請求服務器返回一堆HTML框架結果。然后再次請求到真正保存數據的服務器,由這個服務器返回數據,最后在瀏覽器上對數據進行加載。

這樣做的好處就是服務器那邊能緩解壓力,而且分工明確,容器維護。典型網頁:https://www.jd.com/

那數據如何加載進來?其實我們向下滾動的過程中,js偷偷加載數據,要想看到這個頁面的加載全過程,需要F12查看




看到了吧,??上看到的內容其實是后加載進來的。
注意:有些時候,我們的數據不?定都是直接來?于??源代碼。如果你在??源代碼中找不到你要的數據時,那很可能數據是存放在另?個請求?。
3.HTTP協(xié)議
協(xié)議:就是2個計算機之間為了能流暢的進行溝通設置的君子協(xié)議。常見有TCP/IP,SOAP協(xié)議,HTTP協(xié)議,SMTP協(xié)議
HTTP協(xié)議:Hyper Text Transfer Protocol(超?本傳輸協(xié)議)的縮寫,是?于從萬維?(WWW:World Wide Web )服務器傳輸超?本到本地瀏覽器的傳送協(xié)議。直?點?,瀏覽器和服務器之間數據交互遵守的就是HTTP協(xié)議。
HTTP協(xié)議把?條消息分為三?塊內容。?論是請求還是響應都是三塊內容:
請求:
請求? -> 請求?式(get/post) 請求url地址?
協(xié)議請求頭 -> 放?些服務器要使?的附加信息
請求體 -> ?般放?些請求參數
響應:
狀態(tài)? -> 協(xié)議?
狀態(tài)碼響應頭 -> 放?些客戶端要使?的?些附加
信息響應體 -> 服務器返回的真正客戶端要?的內容(HTML,json)等
在后?我們寫爬?的時候要格外注意請求頭和響應頭。這兩個地??般都隱含著?些?較重要的內容。
請求頭常見的一些重要內容(爬蟲需要):
user-agent:請求載體的身份標識(用啥發(fā)送請求)
Referer:防盜鏈(這次請求從哪個頁面來的?反爬會用到)
Cookie:本地字符串數據信息(用戶登錄信息,反爬會用到)
響應頭中一些重要的內容:
Content-Type:返回內容類型,比如Content-Type: text/html; charset=utf-8
各種神奇的莫名其妙的字符串(需要經驗,一般都是token字樣,防止各種攻擊和爬蟲)
請求方式:
Get:顯示提交
Post:隱示提交
4.requests模塊入門
我們使用python內置的urlib模塊來獲取頁面源代碼,但是他不是我們常用的工具。常用抓取頁面通常用第三方模塊requests。這個模塊的優(yōu)勢就是比urlib還有簡單,且處理各種請求比較方便。
安裝:pip install requests
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
案例1:抓取搜狗內容


案例2:抓取百度翻譯數據
注意百度翻譯這個url不好弄出來。記住,在輸?的時候,關掉各種輸?法,要?英?輸?法,然后不要回?。就能看到這個sug了。


案例3:抓取?瓣電影



學習這次的爬蟲第一個課程知道了一些爬蟲的基礎知識,尤其對爬蟲的渲染機制有了更深的理解。
task1:爬取新浪財經的數據
import requests
url = f'http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml'
dic = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"}
response = requests.get(url, headers=dic) # 處理一個小小的反爬
with open("xinlangcaijing.html", mode="w", encoding="utf-8") as f:?
????f.write(response.text)
response.close()
print("over")
