爬蟲基礎1

一、爬蟲的基本概念

1.什么是爬蟲?

????????????????請求網站并提取數據的自動化程序

2.爬蟲的分類

??? 2.1 通用爬蟲(大而全

??????? 功能強大,采集面廣,通常用于搜索引擎:百度,360,谷歌

??? 2.2 聚焦爬蟲,主題爬蟲(小而精

??????? 功能相對單一(只針對特定的網站的特定內容進行爬取)

??? 2.3增量式爬蟲(只采集更新后的內容)

??????? 爬取更新后的內容,新聞,漫畫,視頻…(區分新老數據)

3.ROOT協議

????????什么是robots協議?

????????3.1 Robots協議的全稱是"網絡爬蟲排除標準" (Robots Exclusion Protocol),簡稱為Robots協議。

????????3.2 Robots協議的一個很重要作用就是網站告知爬蟲哪些頁面可以抓取,哪些不

行。君子協定:指代的是口頭上的協議,如果爬取了,可能會出現法律糾紛(商用).

二、爬蟲的基本流程

1.發起請求

????????通過HTTP庫向目標站點發起請求,即發起一個Request,請求可以包含額外的headers信息,等待服務器響應。

2.獲取響應內容

????????如果服務器能正常響應,會得到一個Response,Response的內容便是索要獲取的頁面內容,類型可能有HTML,Json字符串,二進制數據(如圖片視頻)等類型

3.解析內容

????????得到的內容可能是HTML,可以用正則表達式、網頁解析庫進行解析,可能是Json,可以直接轉為Json對象解析,可能是二進制數據,可能做保存或進一步處理

4.保存數據

?????? 保存形式多樣,可以保存為文本,也可保存至數據庫或者保存特定格式的文件

三、Request和Response

????????1.瀏覽器就發送消息給該網址所在的服務器,這個過程叫做HTTP Request。

????????2.服務器收到瀏覽器發送的消息后,能夠根據瀏覽器發送消息的內容,做相應處理,然

后把消息回傳給瀏覽器。這個過程叫做HTTP Response。

????????3.瀏覽器收到服務器的Response信息后,會對信息進行相應處理,然后展示。

????????4.Request

??? ????4.1 主要有GET、POST兩種類型

????????4.2 URL全稱統一資源定位符,如一個網頁文檔、一張圖片、一個視頻等都可

????????以用URL唯一來確定。

????????4.3 包含請求時的頭部信息,如User-Agent、Host、Cookies等信息。???????

????????4.4 請求時額外攜帶的數據如表單提交時的表單數據。

????????5.Reponse

??????? 5.1 響應狀態

有多種響應狀態,如200代表成功、301跳轉、404找不到頁面、502服務器錯誤

??????? 5.2 響應頭

?????????? 如內容類型、內容長度、服務器信息、設置Cookie等等。

??????? 5.3 響應體

?????????? 最主要的部分,包含了請求資源的內容, 如網頁HTML、圖片二進制數據等。

注意:在監測的時候用Ctrl+F調出搜索框

四、Requests模塊

?????? 作用:發送網絡請求,或得響應數據

開源地址:https://github.com/kennethreitz/requestsicon-default.png?t=N7T8https://github.com/kennethreitz/requests

安裝: pip install requests -i https://pypi.douban.com/simple/

?????? 中文文檔 API http://docs.python-requests.org/zh_CN/latest/index.htmlicon-default.png?t=N7T8http://docs.python-requests.org/zh_CN/latest/index.html

?????? 官方文檔:??? Requests: 讓 HTTP 服務人類 — Requests 2.18.1 文檔icon-default.png?t=N7T8https://requests.readthedocs.io/projects/cn/zh-cn/latest/

1.Requests請求

只能得到一個包的數據

url = 'https://www.baidu.com/'
response = requests.get(url)
print(response)#返回的是一個響應體對象print(response.text)#獲取響應體內容print(response.status_code)#響應狀態碼

Get請求

url = 'https://httpbin.org/get'#url = 'https://httpbin.org/get?age=18&&name=zhangsan'data = {'name':'zhangsan','age':19}response = requests.get(url,params=data)#params攜帶get請求的參數進行傳參print(response.text)
 

Post請求

rl = 'https://httpbin.org/post'data = {'name':'zhangsan','age':19}response = requests.post(url,data=data)#data:攜帶post請求需要的表單數據,在form里面形成print(response.text)

自己理解:

對于Get來說,主要在網址輸入時即輸入URL的時候用到,而POST則是在網頁里面,比如翻譯時的單詞輸入等

??????

獲取Json數據

url = 'https://httpbin.org/get'result = requests.get(url)result_data = result.json()print(result_data)print(type(result_data))

會發現Py里面的Json數據就是字典類型

獲取二進制據數據

url = 'https://b.bdstatic.com/searchbox/icms/searchbox/img/ci_boy.png'result = requests.get(url)#print(result.text) #二進制數據轉文本會顯示亂碼,strprint(result.content)#會發現是以b開頭的bite類型二進制數據,bytesdata = result.contentwith open('TuPian.png','wb') as f:? #wb是寫入二進制f.write(data)

初步偽裝小爬蟲——添加headers

????????????? 瀏覽器用戶身份的標識,缺少的話服務器會認為你不是一個正常的瀏覽器用戶,而是一個爬蟲程序

?????? User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0

import requestsimport fake_useragentua = fake_useragent.UserAgent()ua_fake = ua.chromeurl = 'https://www.jianshu.com/'headers = {#'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0''User-Agent':ua_fake}result = requests.get(url,headers = headers)print(result.text)

會話維持

?????? 例如爬取簡書的收藏的時候,如果不登陸就無法爬取,可以在headers里面增加cookie內容即可,但要注意的是cookie有對應的時間

import requestsimport fake_useragentua = fake_useragent.UserAgent()ua_fake = ua.chromeurl = 'https://www.jianshu.com/'headers = {#'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0''User-Agent':ua_fake,'cookie':''}result = requests.get(url,headers = headers)print(result.text)

代理

import requestsp = {'http':'120.41.143.139:21037','https':'120.41.143.139:21037',
}url = 'https://www.jianshu.com/'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'}result = requests.get(url,headers = headers,proxies=p)print(result.text)

?????? 注意的是這里的ip無效,后面繼續展開

五、正則表達式

?????? 1.正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特殊字符以及這些特殊字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種邏輯過濾

?????? 2.非Python獨有

????????3.Python里面是使用re模塊來實現的,不需要額外進行安裝,是內置模塊

常見匹配模式

? ? ? ? ? ? ?

??????

re.match()方法的使用

import re#content = 'Hello 123 456789 World_This is a Regex Demo'#re.match('正則表達式','目標字符串')#result = re.match('Hello\s\d\d\d\s\d{6}\s\w{10}',content)#print(result.group())#result = re.match('H.*Demo',content)#result = re.match('Hello\s(\d{3})\s(\d{6})',content)#print(result.group(1))? #這里0表示最先出現的括號,1表示第二次出現的括號#print(result.group(1,2))??? #這是一個元組,后面處理較麻煩#content = 'Hello 123456789 World_This is a Regex Demo'#result = re.match('He.*(\d+).*Demo',content)#因為貪婪模式的存在,在He之后,Demo之前至少有一個數字字符,即9#print(result.group(1)) #打印的為9#加上?后,即為非貪婪#result = re.match('He.*?(\d+).*Demo',content)#print(result.group(1))#content = """Hello 123456789#World_This# is a Regex#? Demo"""#result = re.match('He.*?(\d+).*Demo',content,re.S)#re.S忽略換行符#print(result.group())#\轉義符,如果對\轉義,則需要兩個\\,也可以直接寫r,再接一個\#content = 'price is $9.99'#result = re.match('price\sis\s\$9.99',content) #$這個在正則表達式有自己的含義#print(result.group())

search方法

search全文檢索,返回滿足表達式的第一個

#result = re.search('<a\s\href="/3.mp3"\ssinger="(.*)">(.*)</a>',html)#print(result.group(1))

Findall方法

用一個大列表返回滿足所有的正則表達式結果

#result = re.findall('<a\s\href="(.*)"\ssinger="(.*)">(.*)</a>',html)#for i in result:#?? print(i)

Re.sub()

#re.sub('要替換的目標的正則表達式','想要將前面匹配到的數據替換成什么','目標字符串')#sub_html = re.sub('<i.*</i>','',html)#result = re.findall('<a\s\href="(.*)"\ssinger="(.*)">(.*)</a>',sub_html)#for i in result:#?? print(i)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14469.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14469.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14469.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android App啟動流程和源碼詳解

前言 之前看了些App啟動流程的文章&#xff0c;但是看得很淺顯&#xff0c;隔了沒多久就忘了&#xff0c;自己抓耳撓腮的終于看完了&#xff0c;看得頭疼哦。因為很多是個人理解&#xff0c;大哥們主打一個7分信&#xff0c;2分思考&#xff0c;1分懷疑哈。 主要看的源碼是An…

pytorch-20_1 LSTM在股價數據集上的預測實戰

LSTM在股價數據集上的預測實戰 使用完整的JPX賽題數據&#xff0c;并向大家提供完整的lstm流程。 導包 import numpy as np #數據處理 import pandas as pd #數據處理 import matplotlib as mlp import matplotlib.pyplot as plt #繪圖 from sklearn.preprocessing import M…

人類交互4 感覺輸入和運動輸出

人類感覺系統概述 人類感覺系統是由多個感覺器官和神經系統組成&#xff0c;負責感知外部世界的各種刺激和信息。人類感覺系統包括以下幾個主要部分&#xff1a; 視覺系統&#xff1a;視覺系統由眼睛、視神經和大腦視覺皮層組成&#xff0c;負責感知光線、顏色和形狀&#xff…

datasheet芯片數據手冊—新手入門學習(二)【8-18】

參考芯片手冊已經上傳&#xff0c;可自行下載 因為芯片參考手冊內容比較多&#xff0c;故再一次介紹本文內容主要講解章節。 目錄 8、內容介紹 命令真值表 9、Command Definitions 10、READ Operations &#xff08;1&#xff09;頁面讀取操作 &#xff08;2&#xff…

YTM32的flash應用答疑-詳解寫保護功能

YTM32的flash應用答疑-詳解寫保護功能 文章目錄 YTM32的flash應用答疑-詳解寫保護功能IntroductionPrincipleOperation & DemonstrationDemo #1 驗證基本的寫保護功能Demo #2 編程CUS_NVR設定EFM_ADDR_PROT初值Demo #3 啟用寫保護后試試塊擦除操作 Conclusion Introduction…

報名倒計時兩周|2024 OpenTiny 開源之夏項目直播解讀回顧

5月16日&#xff0c;OpenTiny 開源社區成功舉辦了以《OpenTiny 開源之夏項目解讀直播》為主題的直播活動。此次直播中&#xff0c;華為云的高級前端工程師曾令卡、華為云的高級前端工程師伍其和與10位開源之夏技術專家攜手組成項目導師團&#xff0c;面向廣大開發者一同深入探討…

Java類和對象(五)—— 抽象類、接口、Object類和內部類

抽象類 在繼承體系下&#xff0c;父類有些方法可能是要被重寫的&#xff0c;如果我們事先就知道某些方法需要重寫的話&#xff0c;我們可以不用在父類里面具體實現這個方法&#xff0c;這時候我們會用到抽象方法&#xff0c;這時候我們會用到關鍵字abstract關鍵字來修飾 publ…

BatBot智慧能源管理平臺,更加有效地管理能源

隨著能源消耗的不斷增加&#xff0c;能源管理已成為全球面臨的重要問題。BatBot智慧能源管理作為一種的能源管理技術&#xff0c;促進企業在用能效率及管理有著巨大的提升。 BatBot智慧能源管理是一種基于人工智能技術的能源管理系統&#xff0c;通過智能分析和優化能源使用&…

【JAVA |再談接口、Object、內部類】Object類中子類重寫,Cloneable 接口、比較器、內部類

??謝謝大家捧場&#xff0c;祝屏幕前的小伙伴們每天都有好運相伴左右&#xff0c;一定要天天開心哦&#xff01;?? &#x1f388;&#x1f388;作者主頁&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ?? 帥哥美女們&#xff0c;我們共同加油&#xff01;一起…

Internet動態路由選擇—RIP與OSPF

剛做完網絡層動態路由選擇的實驗&#xff0c;寫下此篇記錄實驗過程&#xff0c;鞏固學習成果。 參考書目&#xff1a;《計算機網絡》北京理工大學出版社-劉陽老師編 路由選擇可分為兩種策略&#xff1a; - 靜態路由選擇策略 - 動態路由選擇策略 靜態路由即管理員手動配置路由…

Java 商品入庫系統 案例

測試類 package 練習.商品入庫系統;import java.util.ArrayList; import java.util.Scanner; public class Test {public static final int Enrool 1;public static final int Search 2;public static final int Delect 3;public static final int Exit 4;public static…

在docker上部署postgresSQL主從

文章目錄 一、主從規劃二、創建PostgresSQL的Docker鏡像三、主庫部署1、建立pgsql主庫的data地址2、啟動docker鏡像3、docker內操作4、修改配置文件 四、部署從數據庫1、建立psql備庫的data地址2、啟動docker鏡像3、備庫從主庫同步4、檢查是否同步 五、測試主從數據庫 一、主從…

#2495. 滑動窗口 /【模板】單調隊列

題目描述 有一個長為 ( n ) 的序列 ( a )&#xff0c;以及一個大小為 ( k ) 的窗口。現在這個窗口從左邊開始向右滑動&#xff0c;每次滑動一個單位&#xff0c;求出每次滑動后窗口中的最大值和最小值。例如&#xff1a; 數組是 ([1, 3, -1, -3, 5, 3, 6, 7])&#xff0c; ( …

【深度強化學習】關于同一設備上cuda和gpu計算結果不一致問題

文章目錄 問題描述關于seed: 跟原文一致補充:萬能seed 問題結論cpu和gpu差異來源分析浮點數精度的差異補充報錯&#xff1a;Expected all tensors to be on the same device&#xff01;常見運算上的差異累加運算的差異exp運算的差異matmul運算的差異 forward上的差異&#xff…

【LeetCode 隨筆】面試經典 150 題【中等+困難】持續更新中。。。

文章目錄 189. 輪轉數組122. 買賣股票的最佳時機 II55. 跳躍游戲45. 跳躍游戲 II274. H 指數 &#x1f308;你好呀&#xff01;我是 山頂風景獨好 &#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01; &#x1f49d;希望您在這里可以感受到一份輕松…

機器學習云環境搭建

在 https://support.huaweicloud.com/browsertg-obs/obs_03_1003.html 下載對應版本的 OBS Broswer 軟件&#xff0c;如圖&#xff0c;紅框內的為安裝文件&#xff0c;藍色框內的為對應安裝文件的校驗文件&#xff08;無需下載&#xff09; 以 64 位機為例&#xff0c;下載完…

景源暢信電商:抖店需要的成本高嗎?

在數字化時代的浪潮中&#xff0c;短視頻平臺迅速崛起&#xff0c;成為連接用戶與商家的新橋梁。抖音作為其中的佼佼者&#xff0c;不僅改變了人們的娛樂方式&#xff0c;也催生了新型的電商模式——抖店。許多人好奇&#xff0c;入駐這樣一個充滿活力的平臺&#xff0c;需要承…

618知識狂歡,挑本好書,點亮智慧生活!

618精選編程書單&#xff1a;提升你的代碼力 一年一度的618又到啦&#xff01;今年的618就不要亂買啦&#xff0c;衣服買多了會被淘汰&#xff0c;電子產品買多了會過時&#xff0c;零食買多了會增肥&#xff0c;最后怎么看都不劃算。可是如果你購買知識&#xff0c;堅持閱讀&a…

第N2周:Embeddingbag與Embedding詳解

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制&#x1f680; 文章來源&#xff1a;K同學的學習圈子 目錄 什么是詞嵌入&#xff1f; Embedding與EmbeddingBag詳解 Embedding Embeddi…