咨询类网站建设,wordpress实例教程,欢迎访问语文建设杂志网站,手机如何做微商城网站这篇文章也可以在我的博客查看
爬不了啊#xff01;#xff01;
最近一哥们跟我说百度爬虫爬不了 弹出#xff1a;“百度安全验证”#xff0c;“网络不给力#xff0c;请稍后重试” 说到爬虫#xff0c;这里指的是Python中最常用的requests库 我说怎么爬不了了#x…这篇文章也可以在我的博客查看
爬不了啊
最近一哥们跟我说百度爬虫爬不了 弹出“百度安全验证”“网络不给力请稍后重试” 说到爬虫这里指的是Python中最常用的requests库 我说怎么爬不了了
user-agent加了吗cookie加了吗
他说都加了
我不信邪试了一下超真的返回百度安全认证
!DOCTYPE html
html langzh-CN
headmeta charsetutf-8title百度安全验证/title!-- 省略一堆meta --
/head
bodydiv classtimeout hide-callbackdiv classtimeout-img/divdiv classtimeout-title网络不给力请稍后重试/divbutton typebutton classtimeout-button返回首页/button/divdiv classtimeout-feedback hide-callbackdiv classtimeout-feedback-icon/divp classtimeout-feedback-title问题反馈/p/divscript srchttps://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_v2_21d1ae1.js/script
/body
/html网络有说加Accept header的我试了也不行。 我的代码是这样的
import requestsheaders{
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/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.7
}
response requests.get(https://baidu.com/s, headersheaders)
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-AgentCookieAccept-Encoding
但是……我之前的代码已经包含这些了啊还赠送了一个Accept呢
分析真正问题
这是我突然意识到一个事儿……
说到底Fiddler不也是机器人吗 为啥Fiddler能发出去但Python的requests发不出去啊 难道是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 ChromeDriverManagerdriver webdriver.Chrome(ChromeDriverManager().install())爬就爬我最会爬了
那就给大伙用Selenium爬一个
编写以下代码唯一需要注意的就是Driver的路径需要更改我放到项目根目录了所以直接写文件名
from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 我们并不需要浏览器弹出
options Options()
options.headless True# 启动浏览器的无头模式访问
driver webdriver.Chrome(chromedriver.exe, optionsoptions)
driver.get(https://xueshu.baidu.com/s?wd图像重建、深度学习)# 获取页面的源代码
page_source driver.page_source
# 输出页面源代码
print(page_source)driver.quit()无头浏览器将会为你操办一切直接访问到页面 不仅不需要cookie在非登录的情况下甚至连header都不需要
问题
你可能会感觉得到这东西运行起来比requests慢 我只能说确实因为它是真浏览器
但是……你真的需要快吗
爬虫太快也是会被封IP的如果你配置了IP池、多线程一系列框架还需要在乎这点速度差距吗
慢还有一个好处它更像人工行为了它能难被检测出了嘻嘻
那今天的爬虫就到这了该睡觉了