【Python爬蟲教程】Python網(wǎng)絡(luò)爬蟲最全視頻教程(含項目實戰(zhàn))

1.什么是爬蟲?
請求網(wǎng)站并提取其中所需數(shù)據(jù)的自動化程序

實例演示:
2.爬蟲的基本流程
1》發(fā)起請求
通過HTTP庫向目標點發(fā)送request(可包含headers等信息),等待服務(wù)器響應(yīng)
2》獲取響應(yīng)內(nèi)容
如果服務(wù)器能正常響應(yīng),則會返還response,其中包含的內(nèi)容就是所需的內(nèi)容(可能有HTML<超文本標記語言>,Json字符串,二進制數(shù)據(jù)<圖片視頻等>等類型)
3》解析內(nèi)容
得到內(nèi)容后,需要用相應(yīng)的解析庫對內(nèi)容進行解析,從而對內(nèi)容進行保存或下一步的處理
4》保存數(shù)據(jù)
可以存為文本,也可以存于數(shù)據(jù)庫或者其它特定格式文件

3.request與response

實例演示:
4.request的包含
1》請求方式
主要常用的有GET和POST,此外還有不常用的HEAD,PUT,DELETE,OPTIONS等
<GET與POST的區(qū)別>
1、安全性不同
get請求:GET 方法發(fā)送的數(shù)據(jù)不受保護,因為數(shù)據(jù)在 URL 欄中公開,它以明文形式保存在瀏覽器歷史記錄和服務(wù)器日志中,這增加了漏洞和黑客攻擊的風險。
post請求:POST 方法發(fā)送的數(shù)據(jù)是安全的,因為數(shù)據(jù)未在 URL 欄中公開,參數(shù)不會存儲在瀏覽器歷史記錄或 Web 服務(wù)器日志中,還可以在其中使用多種編碼技術(shù),這使其具有彈性。
2、編碼類型(enctype 屬性)不同
get請求:application/x-www-form-urlencoded。在表單中使用 GET 方法時,數(shù)據(jù)類型中只接受 ASCII 字符。
post請求:multipart/form-data or application/x-www-form-urlencoded 對二進制數(shù)據(jù)使用多部分編碼。在表單提交時,POST 方法不綁定表單數(shù)據(jù)類型,并允許二進制和 ASCII 字符。
3、表單數(shù)據(jù)長度不同
get請求:表單數(shù)據(jù)位于 URL 中,并且 URL 長度受到限制。安全 URL 長度限制通常為 2048 個字符,但因瀏覽器和 Web 服務(wù)器而異。
post請求:無限制。
4、添加書簽不同
get請求:GET 查詢的結(jié)果可以加入書簽中,因為它以 URL 的形式存在。
post請求:POST 查詢的結(jié)果無法加入書簽中。
5、數(shù)據(jù)可變大小
get請求:GET 方法中的可變大小約為 2000 個字符。
post請求:POST 方法最多允許 8 Mb 的可變大小。
6、緩存不同
get請求:GET 方法的數(shù)據(jù)是可緩存的。
post請求:POST 方法的數(shù)據(jù)是無法緩存的。
7、主要作用不同
get請求:GET 方法主要用于獲取信息。
post請求:POST 方法主要用于更新數(shù)據(jù)。
8、能見度不同
get請求:GET方法對每個人都是可見的(它將顯示在瀏覽器的地址欄中),并且對要發(fā)送的信息量有限制。
post請求:POST 方法變量不會顯示在 URL 中。
9、發(fā)送的數(shù)據(jù)數(shù)量不同
get請求:在 GET 中,只能發(fā)送有限數(shù)量的數(shù)據(jù),因為數(shù)據(jù)是在 URL 中發(fā)送的。
post請求:在 POST 中,可以發(fā)送大量的數(shù)據(jù),因為數(shù)據(jù)是在正文主體中發(fā)送的。
10、可用性不同
get請求:發(fā)送密碼或其他敏感信息時,不應(yīng)使用 GET 方法。
post請求:發(fā)送密碼或其他敏感信息時應(yīng)使用 POST 方法。

2》請求URL
URL:統(tǒng)一資源定位符,如網(wǎng)頁文檔,一張圖片,一個視頻等都可用URL唯一來確定
3》請求頭reques-headers
請求時的頭部信息,即請求內(nèi)容中比較重要的配置信息,如User-Agent(用戶代理)Host(端口),Cookies(小型文本)等信息
4》請求體
請求時額外所帶的數(shù)據(jù),如表單提交時的表單數(shù)據(jù)
一般來說,請求體在進行GET請求時不會攜帶任何內(nèi)容,但在POST請求中,請求體會處于from-data的形式
5.response的包含
1》響應(yīng)狀態(tài)
如200(響應(yīng)成功),301(跳轉(zhuǎn)),404(找不到資源),502(服務(wù)器錯誤)
2》響應(yīng)頭
如內(nèi)容類型,長度,服務(wù)器信息,設(shè)置cookie等
3》響應(yīng)體
最主要部分,包含了請求資源的內(nèi)容,如網(wǎng)頁HTML,圖片二進制數(shù)據(jù)等
6.運用
7.爬蟲的抓取范圍

8.解析數(shù)據(jù)的方法
1》直接處理
適合處理最簡單的字符串,只需要進行最簡單的處理即可,如去除頭部或尾部的空格
前提:構(gòu)造網(wǎng)頁簡單,返還數(shù)據(jù)簡單
2》JSON解析
適合那些運用AJAX數(shù)據(jù)加載的網(wǎng)頁,這些網(wǎng)頁返還的數(shù)據(jù)往往是js格式的字符串,這時就需要JSON解析
3》正則表達式
實際上就是規(guī)則字符串,能把一些HTML代碼里的一些相應(yīng)文本提取出來,應(yīng)用較為普遍
4》利用解析庫
如BeautifulSoup,PyQuery,XPath
7.疑問解答
1》 抓取數(shù)據(jù)與所求數(shù)據(jù)不同
8.解決JavaScript渲染問題
1》分析Ajax請求
2》使用Selenium或WebDriver模塊模擬網(wǎng)頁加載
3》利用splash軟件模擬網(wǎng)頁
4》利用PyV8,Ghost.py
9.如何保存數(shù)據(jù)
1》純文本
2》關(guān)系型數(shù)據(jù)庫
3》非關(guān)系型數(shù)據(jù)庫
4》二進制文件