百度搜索爬蟲 百度安全驗證 頁面問題

近來做seo優化需要用百度搜索查排名,但是搜索經常發現頁面沒有返回搜索結果,而是返回了百度安全驗證頁面。

頁面源代碼如下

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>百度安全驗證</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://wappass.bdimg.com/static/touch/css/api/mkdjump_8befa48.css" />
</head>
<body>
    <div class="timeout hide">
        <div class="timeout-img"></div>
        <div class="timeout-title">網絡不給力,請稍後重試</div>
        <button type="button" class="timeout-button">返回首頁</button>
    </div>
    <div class="timeout-feedback hide">
        <div class="timeout-feedback-icon"></div>
        <p class="timeout-feedback-title">問題反饋</p>
    </div>

<script src="https://wappass.baidu.com/static/machine/js/api/mkd.js"></script>
<script src="https://wappass.bdimg.com/static/touch/js/mkdjump_6003cf3.js"></script>
</body>
</html><!--29403083700522112522052810-->
<script> var _trace_page_logid = 2940308370; </script>

而我的搜索部分代碼如下


def main():
    keywords = ['測試']
    check_str = 'xx測試工具'
    for keyword in keywords:
        proxy = ct.get_new_5min_proxy()
        print(proxy)
        proxies = {'http':'http://'+proxy ,'https':'http://'+proxy }
        session = requests.session()
        session.headers = {'User-Agent':random.choice(UA_LIST),"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",}
        #page = session.get('https://www.baidu.com/',timeout=10,proxies=proxies).content
        #sleep_random_time(5)
        search_url = 'https://www.baidu.com/s?wd='+quote(keyword) #  這裏會被反爬蟲!百度安全驗證 貌似不能先打開首頁
        page_buf = session.get(search_url,timeout=20,proxies=proxies).content

首先,根據其他人的經驗,頭信息 “Accept”:“text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9” 的確是必要的,但我加上這個之後還是不行。本來我爲了模擬正常用戶訪問,我是先訪問了baidu.com 再進行的搜索。後來我發現,去掉一開始的首頁訪問反倒成功了。

所以,百度是應該校驗了 Accept頭信息,另外需要直接搜索,不能先打開首頁再搜索。

但話說過來,不用selenium操作,百度要檢測爬蟲方法不要太多。就是性能影響的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章