mac可以做網(wǎng)站開發(fā)嗎百度云登陸首頁
文章目錄
- DrissionPage爬蟲庫簡(jiǎn)介
- 1. 瀏覽器操控模式(類似于游戲中的后臺(tái)模擬鼠標(biāo)鍵盤)
- 2. 數(shù)據(jù)包收發(fā)模式(類似于游戲中的協(xié)議封包)
- 實(shí)戰(zhàn)中學(xué)習(xí)
- 需求:爬取Gitee開源項(xiàng)目的標(biāo)題與描述
- 解決方案1:用數(shù)據(jù)包方式獲取
- 解決方案2:用操控瀏覽器方式獲取
DrissionPage爬蟲庫簡(jiǎn)介
DrissionPage爬蟲庫提供了兩種主要模式,分別為:
1. 瀏覽器操控模式(類似于游戲中的后臺(tái)模擬鼠標(biāo)鍵盤)
優(yōu)點(diǎn):
- 快速實(shí)現(xiàn)數(shù)據(jù)獲取需求
- 相對(duì)簡(jiǎn)單易用
缺點(diǎn):
- 執(zhí)行效率較慢
- 可能存在不穩(wěn)定性
2. 數(shù)據(jù)包收發(fā)模式(類似于游戲中的協(xié)議封包)
優(yōu)點(diǎn):
- 高效執(zhí)行
- 可以繞過瀏覽器限制,自由獲取數(shù)據(jù)
缺點(diǎn):
- 需要耗費(fèi)較多時(shí)間進(jìn)行逆向分析
你可以單獨(dú)使用其中一種模式,也可以交替使用兩種模式。這正是我對(duì)它感興趣的原因。有時(shí)候,我們只是想簡(jiǎn)單獲取一些數(shù)據(jù),而不愿花費(fèi)時(shí)間分析數(shù)據(jù)包。關(guān)于如何安裝DrissionPage庫,這里直接跳過,請(qǐng)查閱作者網(wǎng)站的安裝步驟。作者提供了詳細(xì)的使用文檔,但我覺得針對(duì)初學(xué)者的角度,有必要寫一篇自己的學(xué)習(xí)總結(jié)。初學(xué)者需要根據(jù)自身的知識(shí)水平,制定適合自己的學(xué)習(xí)流程。通過實(shí)踐,發(fā)現(xiàn)不熟悉的地方,再去學(xué)習(xí)。
實(shí)戰(zhàn)中學(xué)習(xí)
需求:爬取Gitee開源項(xiàng)目的標(biāo)題與描述
解決方案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)頁自動(dòng)化工具。既能控制瀏覽器,也能收發(fā)數(shù)據(jù)包。可兼顧瀏覽器自動(dòng)化的便利性和requests的高效率。功能強(qiáng)大,內(nèi)置無數(shù)人性化設(shè)計(jì)和便捷功能。語法簡(jiǎn)潔而優(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 代碼已進(jìn)行了簡(jiǎn)化,去除了一些數(shù)組成員,但這不會(huì)影響我們的分析。由于之前對(duì) Python 中的 JSON 解析語法一無所知,因此需要進(jìn)行一次關(guān)于 JSON 解析的知識(shí)彌補(bǔ),這將為下一篇文章提供基礎(chǔ):如何在 Python 中解析 JSON 數(shù)據(jù)。
直接上代碼:
from DrissionPage import SessionPage
import json# 創(chuàng)建頁面對(duì)象
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)建頁面對(duì)象
page = WebPage()
# 訪問網(wǎng)址
page.get('https://gitee.com/explore')
# 查找文本框元素并輸入關(guān)鍵詞
page('#q').input('DrissionPage')
# 點(diǎn)擊搜索按鈕
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 中的元素操控功能。