爬虫百度返回“百度安全验证”终极解决方案

这篇具有很好参考价值的文章主要介绍了爬虫百度返回“百度安全验证”终极解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章也可以在我的博客查看

爬不了啊!!

最近一哥们跟我说百度爬虫爬不了
弹出:“百度安全验证”,“网络不给力,请稍后重试”

说到爬虫,这里指的是Python中最常用的requests库

我说怎么爬不了了?

  • user-agent加了吗?
  • cookie加了吗?

他说都加了

我不信邪,试了一下,超,真的返回百度安全认证:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>百度安全验证</title>
    <!-- 省略一堆meta -->
</head>
<body>
    <div class="timeout hide-callback">
        <div class="timeout-img"></div>
        <div class="timeout-title">网络不给力,请稍后重试</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_21d1ae1.js"></script>
</body>
</html>

网络有说加Accept header的,我试了,也不行。
我的代码是这样的:

import requests

headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, br',
'Cookie': '[yummy cookies ^_^]',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'
}
response = requests.get('https://baidu.com/s', headers=headers)
response.encoding = 'utf-8'
print(response.text)

我纳闷了,怎么回事呢?
考虑到爬虫其实也是访问网站的过程
此时应该使用fiddler的Composer对需要爬取的报文进行调试
通过不断地增加、减少header项,最终得出必要的headers

到最后,发现请求百度所必须的数据其实只有:

以下是Fiddler Composer的raw输入

GET https://xueshu.baidu.com/s?wd=%E5%9B%BE%E5%83%8F%E9%87%8D%E5%BB%BA%E3%80%81%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0 HTTP/1.1
Host: xueshu.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br
Cookie: [yummy cookies ^_^]

也就是:

  • User-Agent
  • Cookie
  • Accept-Encoding

但是……我之前的代码已经包含这些了啊?还赠送了一个Accept呢?

分析真正问题

这是我突然意识到一个事儿……

说到底,Fiddler不也是机器人吗?
为啥Fiddler能发出去,但Pythonrequests发不出去啊
难道是requests被抓到小鸡脚了吗?

一波考虑之后 感觉有可能
Fiddler虽然也是机器人,但它作为一个流量转发工具,它很完善,行为更像浏览器
requests相反,它本来就不是用作浏览器访问,而是以最轻便方式执行http请求

其中可能某些浏览器应有的行为,被requests阉割掉了,然后被百度识别出来了

爆破

好吧,但不管怎样,你百度还是需要提供服务的
requests虽然因为不是浏览器被你识别出来了,那我用浏览器访问你,你又该如何应对?

因此祭出爬虫的宇宙终极答案:无头浏览器

Selenium

Selenium是一个用于自动化浏览器操作的工具,常用于测试网页应用程序和执行Web任务
它提供了多种编程语言的客户端库,如Python、Java、C#等,用于控制浏览器的行为
通过编写代码,可以模拟用户在浏览器中的操作,比如点击链接、填写表单、提交数据等

OK很好,我们就用Selenium进行爬虫

安装环境

Selenium

我们需要下载python的Selenium库,执行:

pip install -U selenium

浏览器

你需要一个真的浏览器以进行网上冲浪,希望你有一个_

Linux shell玩家也可以安装浏览器
不过就不在此展开了

浏览器驱动

需要安装与你浏览器对应的浏览器驱动(Browse Driver)以供Selenium调用
这里也不详细展开,但大致分两种做法:

手动安装

注意下的是Driver,别下成浏览器本身了

无非就是到官网下,比如:

  • Chrome的最新版
  • Chrome 114以前
自动安装

可以使用webdriver-manager Python库实现自动化安装管理

pip install webdriver-manager

调用就自动安装,比如Chrome:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

爬就爬,我最会爬了

那就给大伙用Selenium爬一个

编写以下代码,唯一需要注意的就是Driver的路径需要更改(我放到项目根目录了,所以直接写文件名):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 我们并不需要浏览器弹出
options = Options()
options.headless = True

# 启动浏览器的无头模式,访问
# ========================================
# 注意:这是Selenium 4.10.0以下写法,高版本见下面
# ========================================
driver = webdriver.Chrome('chromedriver.exe', options=options)
driver.get("https://xueshu.baidu.com/s?wd=图像重建、深度学习")

# 获取页面的源代码
page_source = driver.page_source
# 输出页面源代码
print(page_source)

driver.quit()

❗在Selenium 4.10.0及以上版本,上面的代码会报错:

TypeError: WebDriver.__init__() got multiple values for argument 'options'

原因是webdriver的函数签名有改变,在高版本中,你需要显式指定service:

from selenium.webdriver.chrome.service import Service
s = Service('chromedriver.exe')
driver = webdriver.Chrome(service=s, options=options)

无头浏览器将会为你操办一切,直接访问到页面
不仅不需要cookie(在非登录的情况下),甚至连header都不需要

问题

你可能会感觉得到,这东西运行起来比requests
我只能说确实,因为它是真浏览器

但是……你真的需要快吗?

  • 爬虫太快也是会被封IP的
  • 如果你配置了IP池、多线程一系列框架,还需要在乎这点速度差距吗?

慢还有一个好处,它更像人工行为了,它能难被检测出了,嘻嘻

那今天的爬虫就到这了,该睡觉了文章来源地址https://www.toymoban.com/news/detail-652032.html

到了这里,关于爬虫百度返回“百度安全验证”终极解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安全网格:数据安全的终极解决方案

    随着网络威胁的不断增长和安全法规的日益严苛,全球网络安全投资规模不断创下新高。据Gartner预测,2024年全球组织在IT安全和风险管理工具上的投入将达到2087亿美元。 然而,埃森哲(Accenture)的报告却显示,尽管投入巨资,超过七成(74%)的首席执行官对企业数据安全和网

    2024年04月27日
    浏览(27)
  • 最佳解决方案:如何在网络爬虫中解决验证码

    Captcha(全自动区分计算机和人类的公开图灵测试)是广泛应用的安全措施,用于区分合法的人类用户和自动化机器人。它通过呈现复杂的挑战,包括视觉上扭曲的文本、复杂的图像或复杂的拼图等方式,要求用户成功解决这些挑战以验证其真实性。然而,在进行网络爬虫时,

    2024年01月23日
    浏览(27)
  • Cloudflare5s盾破解|爬虫自动验证|解决方案

    一、什么是Cloudflare5s盾 Cloudflare是一个网站加速和安全服务提供商。Cloudflare  5s盾是指网站防御模式,它可以防止恶意流量和攻击,如DDoS、SQL注入、XSS等,保护网站免受恶意攻击和流量泛滥带来的服务中断或数据泄漏等问题。此外,Cloudflare  5s盾还可以通过Web应用程序防火

    2024年02月12日
    浏览(31)
  • 解决百度网盘登录安全验证显示空白页

    不知道什么BUG,有的系统能直接验证,有的系统不能,对于我这种频繁换环境的是真的难受。 试过网上各种方法,什么重启、重装、在IE设置中添加信任站点、清除IE缓存都不行。 但是这些操作似乎有个共同点,没错,就是围绕着微软已经抛弃的IE。 那么重点来了,既然这个

    2024年02月07日
    浏览(37)
  • 接口安全验证及防刷处理方案_支付安全 防刷 防盗 的解决方案 csdn

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》

    2024年04月26日
    浏览(29)
  • 数据安全之数据库字段加解密检索和前端返回脱敏?看看我这个最强解决方案

    数据安全一直是我们老生常谈的话题了,随着国产化的日渐推进和数字化信息改革,数据安全越来越被人们所重视。数据库作为存储、管理和检索数据的核心基础设施,其中可能包含着大量的敏感信息,如个人手机号、身份证号码、银行账户、家庭地址等信息。为了保障这些敏

    2024年02月13日
    浏览(36)
  • ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式、爬虫阻止)

    “已阅即焚” 是一种通信方式,它指的是一旦消息被对方阅读后,消息内容会被自动删除或销毁,不再留下任何痕迹。这种方式通常用于提高信息的安全性和隐私保护。 在传统的通信应用中,已阅即焚的功能可以通过以下几种方式实现: 自动删除:消息在对方阅读后,会自

    2024年02月16日
    浏览(54)
  • Vue大屏自适应终极解决方案

    v-scale-screen 是一个大屏自适应组件,在实际业务中,我们常用图表来做数据统计,数据展示,数据可视化等比较直观的方式来达到一目了然的数据查看,但在大屏开发过程中,常会因为适配不同屏幕而感到困扰,下面我们使用 v-scale-screen 来解决一下这个难题 废话不多说,先

    2024年02月12日
    浏览(38)
  • 记录--按钮防连点终极解决方案

    在日常前端开发中,我们经常会面对一个让人头疼的问题:按钮被用户点击了两次以上,导致出现重复提交表单或者发送重复的请求。这个问题常见而且恼人。为了解决这个问题,我们需要一个又简单又实用的方法,可以在不搞乱原有代码的情况下,有效地防止按钮被连续点

    2024年02月03日
    浏览(36)
  • flutter 数组数据去重终极解决方案

    在 Flutter 应用程序开发中,处理数据的去重是一个常见的任务。本文将详细介绍 Flutter 中的各种数据去重方法,包括使用 Set、fold 方法、where 方法、自定义函数以及使用第三方库等不同的技巧。每种方法都将提供示例代码和解释,帮助您理解和应用这些方法,以满足不同的需

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包