mac可以做網(wǎng)站開發(fā)嗎百度云登陸首頁
文章目錄
- DrissionPage爬蟲庫簡介
- 1. 瀏覽器操控模式(類似于游戲中的后臺模擬鼠標鍵盤)
- 2. 數(shù)據(jù)包收發(fā)模式(類似于游戲中的協(xié)議封包)
- 實戰(zhàn)中學習
- 需求:爬取Gitee開源項目的標題與描述
- 解決方案1:用數(shù)據(jù)包方式獲取
- 解決方案2:用操控瀏覽器方式獲取
DrissionPage爬蟲庫簡介
DrissionPage爬蟲庫提供了兩種主要模式,分別為:
1. 瀏覽器操控模式(類似于游戲中的后臺模擬鼠標鍵盤)
優(yōu)點:
- 快速實現(xiàn)數(shù)據(jù)獲取需求
- 相對簡單易用
缺點:
- 執(zhí)行效率較慢
- 可能存在不穩(wěn)定性
2. 數(shù)據(jù)包收發(fā)模式(類似于游戲中的協(xié)議封包)
優(yōu)點:
- 高效執(zhí)行
- 可以繞過瀏覽器限制,自由獲取數(shù)據(jù)
缺點:
- 需要耗費較多時間進行逆向分析
你可以單獨使用其中一種模式,也可以交替使用兩種模式。這正是我對它感興趣的原因。有時候,我們只是想簡單獲取一些數(shù)據(jù),而不愿花費時間分析數(shù)據(jù)包。關于如何安裝DrissionPage庫,這里直接跳過,請查閱作者網(wǎng)站的安裝步驟。作者提供了詳細的使用文檔,但我覺得針對初學者的角度,有必要寫一篇自己的學習總結(jié)。初學者需要根據(jù)自身的知識水平,制定適合自己的學習流程。通過實踐,發(fā)現(xiàn)不熟悉的地方,再去學習。
實戰(zhàn)中學習
需求:爬取Gitee開源項目的標題與描述
解決方案1:用數(shù)據(jù)包方式獲取
F12分析數(shù)據(jù)包得出結(jié)論:
Get:
https://api.indexea.com/v1/search/widget/wjawvtmm7r5t25ms1u3d?query=1048&q=DrissionPage&from=0&size=20&sort_by_f=
Response:
{"took": 0,"hits": {"total": {"value": 13,"relation": "eq"},"max_score": 185.50804,"hits": [{"_index": 1027,"_id": "9101163","_score": 185.50804,"fields": {"last_push_at": ["2024-05-14 17:08:51"],"license": ["BSD-3-Clause"],"fork": [0],"count.fork": [842],"description": ["基于python的網(wǎng)頁自動化工具。既能控制瀏覽器,也能收發(fā)數(shù)據(jù)包??杉骖櫈g覽器自動化的便利性和requests的高效率。功能強大,內(nèi)置無數(shù)人性化設計和便捷功能。語法簡潔而優(yōu)雅,代碼量少。"],"recomm": [2],"langs": ["Python"],"count.star": [4030],"id": [9101163],"title": ["g1879/DrissionPage"],"url": ["https://gitee.com/g1879/DrissionPage"]}},{"_index": 1027,"_id": "27108495","_score": 7.674755,"fields": {"last_push_at": ["2024-01-08 20:34:25"],"fork": [0],"count.fork": [11],"description": ["DrissionPage的文檔"],"recomm": [0],"langs": ["HTML","JavaScript"],"count.star": [12],"id": [27108495],"title": ["g1879/Docs32"],"url": ["https://gitee.com/g1879/Docs32"]}}]},"suggest": {"name": [{"text": "drissionpage","offset": 0,"length": 12,"options": []}]},"cache": 1716708583505,"action": "20240526162838_cdffgkei6kksr7o69ezazp1vgh"
}
返回的 JSON 代碼已進行了簡化,去除了一些數(shù)組成員,但這不會影響我們的分析。由于之前對 Python 中的 JSON 解析語法一無所知,因此需要進行一次關于 JSON 解析的知識彌補,這將為下一篇文章提供基礎:如何在 Python 中解析 JSON 數(shù)據(jù)。
直接上代碼:
from DrissionPage import SessionPage
import json# 創(chuàng)建頁面對象
page = SessionPage()page.get(f'https://api.indexea.com/v1/search/widget/wjawvtmm7r5t25ms1u3d?query=1048&q=DrissionPage&from=0&size=20&sort_by_f=')
data = page.json
hits = data['hits']['hits']
for hit in hits:if 'title' in hit['fields']:print(hit['fields']['title'][0])if 'description' in hit['fields']:print(hit['fields']['description'][0])print()
解決方案2:用操控瀏覽器方式獲取
代碼:
from DrissionPage import WebPage# 創(chuàng)建頁面對象
page = WebPage()
# 訪問網(wǎng)址
page.get('https://gitee.com/explore')
# 查找文本框元素并輸入關鍵詞
page('#q').input('DrissionPage')
# 點擊搜索按鈕
page('tag:button@class=ui orange button').click()
# 等待頁面加載
page.wait.load_start()
# 獲取所有行元素
items = page.eles('.card-body')
for item in items:print(item.ele('.title').text)print(item.ele('.col-12 outline text-secondary').text)print()
最煩人的部分是元素的查找、操作和定位等操作,這啟發(fā)了我寫第三篇文章的想法:如何充分利用 DrissionPage 中的元素操控功能。