爬蟲
什么是爬蟲:
- 通過撰寫程式,模擬瀏覽器上網,然后讓其去互聯網上抓取資料的程序,
爬蟲究竟是合法還是違法的?
- 在法律中是不被禁止
- 具有違法風險
- 善意爬蟲 惡意爬蟲
爬蟲帶來的風險可以體現在如下2方面:
- 爬蟲干擾了被訪問網站的正常運營
- 爬蟲抓取了收到法律保護的特定型別的資料或資訊
如何在使用撰寫爬蟲的程序中避免進入局子的厄運呢?
- 時常的優化自己的程式,避免干擾被訪問網站的正常運行
- 在使用,傳播爬取到的資料時,審查抓取到的內容,如果發現了涉及到用戶隱私
商業機密等敏感內容需要及時停止爬取或傳播
爬蟲在使用場景中的分類
- 通用爬蟲:
抓取系統重要組成部分,抓取的是一整張頁面資料,
- 聚焦爬蟲:
是建立在通用爬蟲的基礎之上,抓取的是頁面中特定的區域內容,
- 增量式爬蟲:
檢測網站中資料更新的情況,只會抓取網站中最新更新出來的資料,
反爬機制:門戶網站,可以通過制定相應的策略或者技術手段,防止爬蟲程式進行網站資料的爬取,
反反爬策略:爬蟲程式可以通過制定相關的策略或者技術手段,破解門戶網站中具備的反爬機制,從而可以獲取門戶網站中相關的資料,
robots.txt協議: 君子協議,規定了網站中哪些資料可以被爬蟲爬取哪些資料不可以被爬取,
requests模塊
1.什么是requests模塊
- python原生一個基于網路請求的模塊,模擬瀏覽器發起請求,
- 2.為什么要使用requests模塊
- 1.自動處理url編碼
- 2.自動處理post請求的引數
- 3.簡化cookie的代理的操作:
cookie操作:
- 創建一個cookiejar物件
- 創建一個handler物件
- 創建一個operner
代理操作:
- 創建handler物件,代理ip和埠封裝到該物件
- 創建openner物件
- 3.requests如何被使用
- 安裝:pip install requests
- 使用流程:
- 1.指定url
- 2.使用requests模塊發起請求
- 3.獲取回應資料
- 4.進行持久化存盤
- 4.通過5個基于requests模塊的爬蟲專案對該模塊進行系統學習和鞏固
- get請求
- post請求
- ajax的get
- ajax的post
- 綜合
如何使用:(requests模塊的編碼流程)
- 指定url
- UA偽裝
- 請求引數的處理
- 發起請求
- 獲取回應資料
- 持久化存盤
實戰編碼:
- 需求:爬取首頁的頁面資料
#指定url
url = "https://www.luffycity.com/"
#發起請求
#獲取回應資料
res = requests.get(url = url)
data = https://www.cnblogs.com/ivanlee717/p/res.text

網頁采集器

動態搜索的話,我們需要自定義請求
#處理url攜帶的引數:封裝到字典中
kw = input('enter a word:')
param = {
'query':kw
}
#對指定的url發起的請求對應的url是攜帶引數的,并且請求程序中處理了引數
res = requests.get(url=url, params=param) #帶引數對指定url發起請求
page_text = res.text
print(page_text)
UA偽裝:讓爬蟲對應的請求載體身份標識偽裝成某一款瀏覽器
UA:User-Agent(請求載體的身份標識)
UA檢測:門戶網站的服務器會檢測對應請求的載體身份標識,如果檢測到請求的載體身份標識為某一款瀏覽器,
說明該請求是一個正常的請求,但是,如果檢測到請求的載體身份標識不是基于某一款瀏覽器的,則表示該請求
為不正常的請求(爬蟲),則服務器端就很有可能拒絕該次請求,

這是正常瀏覽器所以使用的用戶代理,將這個寫到代碼中就會偽裝成瀏覽器請求
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
#這一步也可以通過抓包攔截獲取
}
url = 'https://www.sogou.com/web?'
kw = input()
param ={
"query" :kw
}
res = requests.get(url=url, params=param,headers=header) #帶引數對指定url發起請求
破解百度翻譯

藍色框是我們想要得到的東西,
當在搜索框中輸入之后,服務器會通過ajax請求提交,所以我們可以去捕獲XHR型別的請求
以輸入regina為例,可以得到以下的資料包,一共是6個sug和其他檔案,依次打開,我們會發現每輸入一個字母

瀏覽器就會提交一次ajax請求,所以我們可以找到最后一次提交的檔案
Request URL: https://fanyi.baidu.com/sug
Request Method: POST
Status Code: 200 OK
Remote Address: 103.235.46.58:443
Referrer Policy: strict-origin-when-cross-origin
Content-Type: application/json
Date: Tue, 17 Jan 2023 05:38:54 GMT
FORM DATA:
kw:regina
資料是通過post請求提交,并且引數有一個我們要輸入的東西,url如上所示

#1.指定url
post_url = 'https://fanyi.baidu.com/sug'
#2.進行UA偽裝
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
#3.post請求引數處理(同get請求一致)
word = input('enter a word:')
data = https://www.cnblogs.com/ivanlee717/p/{'kw':word
}
#4.請求發送
response = requests.post(url=post_url,data=https://www.cnblogs.com/ivanlee717/p/data,headers=headers)
我們看到回應資料是json型別,可以使用json方法來得到結果
#5.獲取回應資料:json()方法回傳的是obj(如果確認回應資料是json型別的,才可以使用json())
dic_obj = response.json()
#持久化存盤
fileName = word+'.json'
fp = open(fileName,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False) #中文無法ascii碼編碼
本文來自博客園,作者:ivanlee717,轉載請注明原文鏈接:https://www.cnblogs.com/ivanlee717/p/17078664.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542680.html
標籤:Python
上一篇:Python從零到壹丨影像增強及運算:影像掩膜直方圖和HS直方圖
下一篇:【manim】之圓規影片
