最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

不會代碼的你也能一鍵批量采集數(shù)據(jù)

2023-03-03 17:18 作者:金九億Joey  | 我要投稿

背景描述

最近需要收集百度搜索查詢結(jié)果,可是使用的時候,發(fā)現(xiàn)之前的python腳本程序失效了。

這使我無法批量采集所需的關(guān)鍵詞數(shù)據(jù)。

問題描述

啟動python腳本程序后,獲取的數(shù)據(jù)一直是空值。

request請求結(jié)果返回的html頁面是百度安全驗(yàn)證頁面。

問題演示

搜索了一下,知道這是百度設(shè)置的反爬機(jī)制。

如果請求被檢測判定為非人類,則會返回此頁面。

<!DOCTYPE?html>
<html?lang="zh-CN">
??<head>
????<meta?charset="utf-8">
????<title>百度安全驗(yàn)證</title>
????<meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8">
????<meta?name="apple-mobile-web-app-capable"?content="yes">
????<meta?name="apple-mobile-web-app-status-bar-style"?content="black">
????<meta?name="viewport"?content="width=device-width,?user-scalable=no,?initial-scale=1.0,?minimum-scale=1.0,?maximum-scale=1.0">
????<meta?name="format-detection"?content="telephone=no,?email=no">
????<link?rel="shortcut?icon"?href="https://www.baidu.com/favicon.ico"?type="image/x-icon">
????<link?rel="icon"?sizes="any"?mask?href="https://www.baidu.com/img/baidu.svg">
????<meta?http-equiv="X-UA-Compatible"?content="IE=Edge">
????<meta?http-equiv="Content-Security-Policy"?content="upgrade-insecure-requests">
????<link?rel="stylesheet"?href="https://ppui-static-wap.cdn.bcebos.com/static/touch/css/api/mkdjump_aac6df1.css"?/>
??</head>
??<body>
????<div?class="timeout?hide-callback">
??????<div?class="timeout-img"></div>
??????<div?class="timeout-title">網(wǎng)絡(luò)不給力,請稍后重試</div>
??????<button?type="button"?class="timeout-button">返回首頁</button>
????</div>
????<div?class="timeout-feedback?hide-callback">
??????<div?class="timeout-feedback-icon"></div>
??????<p?class="timeout-feedback-title">問題反饋</p>
????</div>
????<script?src="https://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_v2_2d634b8.js"></script>
??</body>
</html>

我的思考

為了能夠解決這個問題。

首先我猜想可能是請求頭headers的數(shù)據(jù)過期了。

我通過瀏覽器F12,拿到最新的cookie,在代碼中替換了cookie。

初次嘗試

嘗試執(zhí)行代碼,結(jié)果失敗。依舊是百度安全驗(yàn)證頁面。

再次思考

我二次猜想,把瀏覽器中成功獲取搜索結(jié)果的url,替換成我在代碼中發(fā)起的請求url。

當(dāng)然,此時的cookie也是當(dāng)前頁面請求中發(fā)起的cookie。

再次嘗試

這次,代碼是可以正常請求到數(shù)據(jù)的。

一個猜想

我替換了url中的關(guān)鍵詞word,然后執(zhí)行代碼,又會返回安全驗(yàn)證。

我心想難道百度現(xiàn)在這么坑,一次搜索結(jié)果就要對應(yīng)一個cookie么。

得出結(jié)果

頭好痛,我可能要長腦子了。

終于腦子長出來了,我找到了突破口。

我發(fā)現(xiàn)用urllib庫的request模塊就可以正常請求得到網(wǎng)頁數(shù)據(jù)。

既然這個模塊可以拿到數(shù)據(jù),就現(xiàn)從這一塊入手。

編寫代碼進(jìn)行測試。

req?=?urllib.request.Request(url,?headers=headers)
response?=?urllib.request.urlopen(req)

html?=?response.read().decode('utf-8')
print(html)
html?=?etree.HTML(html)

image.png

可以拿到數(shù)據(jù)得到數(shù)據(jù)。

那就可以完善代碼,實(shí)現(xiàn)自動翻頁爬取分頁數(shù)據(jù)了。

既然urllib庫可以請求成功,那我之前的兩個猜想就都是胡言亂語。

雖然我沒有搞清楚為什么request庫會被反爬機(jī)制制裁。

但是既然可以完成需求,那就先用著。

能跑就行(不是)。

附加彩蛋

在一度思索反爬原理而得不到結(jié)果的時候,我想到了借助網(wǎng)頁采集工具來實(shí)現(xiàn)我的需求。

我便選擇了八爪魚采集器。

這個工具很強(qiáng)大,不需要懂代碼,就可以完成網(wǎng)頁數(shù)據(jù)的采集。

花了十分鐘做了簡單的配置我就在八爪魚獲得了想要的數(shù)據(jù)。

屏幕截圖 2023-03-03 142024.png

結(jié)語

此次實(shí)踐目標(biāo)是:收集百度搜索的詞條數(shù)據(jù)。

使用了兩種收集方式:

  1. python腳本

  2. 八爪魚采集器

對比優(yōu)缺點(diǎn)

  • 各自優(yōu)點(diǎn)

python性能更好,可以對數(shù)據(jù)進(jìn)行更為復(fù)雜的處理。

八爪魚采集器上手簡單,無需代碼即可采集數(shù)據(jù)。

  • 各自缺點(diǎn)

python需要一定的編程基礎(chǔ),對小白不太友好。

八爪魚采集器可以采集數(shù)據(jù),但是只能做一些簡單的邏輯處理判斷。

疑點(diǎn)未解決

python腳本中request庫模擬請求會被百度反爬機(jī)制干掉,但是urllib庫的request模塊模擬的請求可以正常使用,這背后的原因是什么。


不會代碼的你也能一鍵批量采集數(shù)據(jù)的評論 (共 條)

分享到微博請遵守國家法律
阿克苏市| 泰来县| 东兰县| 泾川县| 剑阁县| 广灵县| 洪江市| 五寨县| 连城县| 富宁县| 始兴县| 盐亭县| 社会| 依兰县| 和政县| 敦化市| 米林县| 冀州市| 日照市| 太康县| 托克逊县| 县级市| 新沂市| 东源县| 祁阳县| 北海市| 黔东| 图片| 承德县| 定安县| 丹巴县| 鹰潭市| 米泉市| 五河县| 伽师县| 香格里拉县| 镇平县| 肇州县| 兴海县| 都昌县| 湖口县|