首页 > 经验 > 关键词  > Githubpages最新资讯  > 正文

解决Github Pages禁止百度爬虫的方法与可行性分析

2015-06-10 16:43 · 稿源: 咀嚼之味

我写技术博客有两个原因:一是总结自己近日的研究成果,二是将这些成果分享给大家。所以就我个人来说,还是比较希望写出来的文章有更多的人能够看到的。我最近注意到我的博客的流量大多来自于谷歌,而几乎没有来源于百度的。而本文就旨在提出这个问题,并尝试着去解决这个问题。当然,换一个云主机服务提供商能够很直接明了地解决这个问题,但这不是本文的重点,暂且不提。

为什么 Github Pages 禁用了百度爬虫?

就这个问题,我联系了 Github Support 部门,对方给我的答复是这样的:

Hi Jerry,

Sorry for the trouble with this. We are currently blocking the Baidu user agent from crawling GitHub Pages sites in response to this user agent being responsible for an excessive amount of requests, which was causing availability issues for other GitHub customers.

This is unlikely to change any time soon, so if you need the Baidu user agent to be able to crawl your site you will need to host it elsewhere.

Apologies again for the inconvenience.

Cheers,Alex

简单地来说,就是百度爬虫爬得太猛烈,已经对很多 Github 用户造成了可用性的问题了,而禁用百度爬虫这一举措可能会一直持续下去。(不知道跟之前的 Great Cannon有没有关系)

因此,只能自己动手丰衣足食了,下面来讨论一下解决这个问题的方式。

解决问题 —— CDN

我在知乎提了这样一个问题:如何解决百度爬虫无法爬取搭建在Github上的个人博客的问题?,并且 Stackoverflow 上也有类似的问题:github blocks Baidu spider, how can I make it work again。两位知乎答主和Stackoverflow的评论都比较推荐使用 CDN 来解决这个问题。

那我们首先来了解一下 CDN 的原理。

CDN 的原理

CDN 的全称是 Content Delivery Network,即内容分发网络,一般用于分发静态内容,比如图片、视频、CSS、JS文件。

如果不使用 CDN,那所有用户的请求都会直接导向单一的源服务器(Origin Server)。而如果启用了 CDN 服务,那么 CDN 服务提供商会分配给你若干个节点,这里以上图为例,比如分配给你的服务器 3 个东海岸的节点和 3 个西海岸的节点。

此时用户就不会直接向源服务器发送请求,而是向边缘服务器(Edge Server)发送请求。再看下面这张示意图,当你首先次访问资源 foo.png 时,边缘服务器没有 foo.png 的缓存。所以会由它向源服务器发送请求,并获取到 foo.png。下一次所有经过这个节点的请求,因为存在缓存的缘故,都不用再次向源服务器发送请求,而是由边缘服务器直接返回该文件的缓存即可。这样一来就可以大大降低时延,也减小了源服务器的压力。

那 CDN 服务是如何决定你从哪个边缘服务器获取资源的呢?其实就是在发送 DNS 请求的时候,将你要访问的域名映射到最近的节点的 IP 上。具体判定哪个是最近的节点,最简单的策略就是根据 IP,但各个 CDN 的服务提供商的策略可能各不相同,这里就不展开讨论了。

CDN 的局限性

CDN 确实能够解决不少问题,但它本身也存在一定的局限性。其中最重要的一点是:决不能用 CDN 来缓存动态内容

来看一个例子,假设服务器端有这样一个PHP文件 hello.php:

...Hello,

如果 CDN 缓存了这个文件就会造成很糟糕的后果。比如 Jerry 先访问了 hello.php 页面,得到了 Hello, Jerry 的内容。此时这个内容已经被缓存到了节点 A,而 Tom 同学也是离节点 A 最近,那么 Tom 同学访问 hello.php 时,就会直接得到缓存内容:Hello, Jerry。这个时候 Tom 同学的内心一定是崩溃的。

你还应该避免使用 CDN 的情况有:根据 user-agent 来选择返回移动版还是桌面版页面。UA 判断这对解决我们的问题很重要,下文会提及。当然,部署在 Github Pages 上的网站都是静态站点,所有用户进来看到的内容一般是相同的。所以通过 CDN 来对全站进行缓存没有什么问题。

可行性分析

Github是通过 UA 来判定百度爬虫并返回 403 Forbidden 的。而百度爬虫的 UA 一般是这样的:

Mozilla/5.0 (compatible; Baiduspider/2.0; +https://www.baidu.com/search/spider.html)

那么使用 CDN 来解决这个问题的关键就在于,让百度爬虫不要直接向 Github 的服务器发送请求,而是通过 CDN 边缘服务器的缓存来抓取网站的内容。边缘服务器本身是不会关心 UA 的,所以问题就迎刃而解了。

可是问题真有这么简单吗?

并不是。

来看一下,我使用百度站长工具来进行抓取诊断的测试结果:

结果是只有偶尔能够抓取成功,结果很让人失望吧?让我们来分析以下原因,首先罗列我目前可知的一些情况:

  • 所有抓取成功的页面都访问了 209.9.130.5 节点
  • 所有抓取失败的页面都访问了 209.9.130.6 节点
  • 我本机ping jerryzou.com会 ping 到 209.9.130.8 节点

好了,细心的同学应该已经发现问题所在了,百度爬虫大部分的请求被导到了 209.9.130.6 节点,但是这个节点上没有页面的缓存!!如果百度爬虫是某个页面的首先个访问者,CDN 的边缘服务器会用百度爬虫的 UA 去请求 Github 的服务器,得到的结果自然是被拒绝了。

最终我们得到了通过 CDN 来解决这个问题的必要条件:你的博客必须有巨大的访问量!这样才能保证 CDN 的每一个边缘服务器上都有任何一个页面的缓存。我觉得除非像React主页这样的网站,不然要达到这个要求几乎不可能的。

最后,一句话总结:CDN 这一解决方案并不靠谱。

当然,不死心的我还是做了件奇怪的事……首先我在找到了所有 BaiduSpider 的 IP,然后想要伪装成这些 IP 来请求内容,以此想在所有百度爬虫可能爬取的边缘服务器上都建立缓存。

<?phpfunction Curl($url, $ip){    
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 10,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => [ 'X-FORWARDED-FOR: '.$ip, 'CLIENT-IP: '.$ip ],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_NOBODY => false,
CURLOPT_REFERER => 'https://test.jerryzou.com',
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36',
]); $response = curl_exec($ch);
curl_close($ch);
return $response;}$ipList = [
'203.125.234.1',
'220.181.7.1',
'123.125.66.1',
'123.125.71.1',
'119.63.192.1',
'119.63.193.1',
'119.63.194.1',
'119.63.195.1',
'119.63.196.1',
'119.63.197.1',
'119.63.198.1',
'119.63.199.1',
'180.76.5.1',
'202.108.249.185', '202.108.249.177',
'202.108.249.182', '202.108.249.184', '202.108.249.189',
'61.135.146.200', '61.135.145.221', '61.135.145.207',
'202.108.250.196', '68.170.119.76',
'207.46.199.52',];foreach ($ipList as $ip) {
Curl('https://jerryzou.com', $ip);
echo "$ip\n";}
echo "Done\n";

然而并没有卵用……

举报

  • 相关推荐
  • 百度搜索,跳出“框”外

    以AI为“黄金配方”,百度搜索已经悄然生长出了“肌肉”。用户侧最直观的感受是,曾经熟悉的搜索框变“大”了。 “大”从表面看是搜索框所能承载的内容和能调用的工具变多。例如,过去做旅行计划得靠“亲子出游”“漂流”“一天”等关键词堆砌,现在只要用自然语言提需求即可。

  • 最重要的搜索阵地,百度想誓死守住

    AI搜索的东风刮过两年,百度终于下决心,对自家搜索引擎“动刀子”。 7月2日,百度宣布开启十年来最大一次搜索改版,正式将搜索框改版成支持千字输入的“智能框”,从“给链接”跨越到了“给答案”。另外靠着智能体,百度搜索也进入了“解决任务”的阶段,并集成了AI写作、AI图片/视频生成等一系列服务。 当然,这还不够。在阿里夸克、字节豆包等产品不断往自家�

  • 百度2026届校招正式启动!AI相关职位占比超90%:双批次双机会

    今天,百度正式启动了2026届校园招聘,将发放4000offer,覆盖四大职位类别,共有256个细分职位,分布于北京、上海、深圳、广州、成都、大连、杭州七大城市。 值得一提的是,此次2026届百度校园招聘中,AI相关职位占比超九成,共新增90个AI相关职位,覆盖多模态、跨模态、大模型架构等方向。

  • 双第一!百度智能云领跑2025上半年大模型中标市场

    2025年上半年,全球AI产业迎来关键拐点,多模态理解、深度逻辑推理等核心能力实现重大突破。大模型加速渗透产业核心场景,推动AI从通用能力向深度行业应用转变。我国大模型项目呈现爆发式增长,中标项目累计1810个,金额突破64亿元。百度智能云表现突出,以48个中标项目和5.1亿元金额稳居"双第一",在金融、能源、政务等重点行业持续领先。行业趋势表明,大模型市场正从"通用竞争"迈向"行业深耕"阶段,技术实力与落地能力成为关键。百度智能云依托领先的大模型技术与全栈智能基础设施,助力企业高效部署应用AI,目前已有65%央企选择与其合作。在能源、交通、金融等领域,百度打造了多个行业标杆案例,显著提升业务效率。

  • 百度文库智能PPT月访问量超3400万、位列全球第一,市场份额断崖式领先

    极光旗下月狐数据发布《2025年智能PPT行业市场研究报告》显示,中国智能PPT市场年增速超50%,百度文库智能PPT月访问量超3400万,市场份额断层领先。报告指出,百度文库在六大产品维度均列行业第一,依托海量资源实现分钟级高质量PPT生成,支持多模态输入输出,并持续优化可视化效果。2023年百度文库率先推出全流程智能PPT解决方案,两年间在文本、图表、美化等方面全面提升质量,首创专业布局功能,推动行业从"直接可用"向"专家级"跃迁。目前百度文库AI月活用户达9700万,已推出数百项多模态AI能力,成为AI时代的"超级生产力工具"。

  • 荣耀MagicPad 3支持离焦护眼技术:开启25分钟 短暂性近视指标降低13度

    荣耀MagicPad 3将在7月2日发布,荣耀平板与IoT产品领域总经理@荣耀平板利用哥透露,该机支持荣耀独创的离焦护眼技术。 据介绍,经专业医疗权威机构临床研究表明,青少年在使用开启离焦护眼特性屏幕30分钟后,短暂性近视指标改善约10度,同时脉络膜血流也得到了有效改善。 青年群体的同期验证显示,在使用开启离焦护眼特性屏幕25分钟即可实现短暂性近视指标降低13度,�

  • AI日报:百度发布“绘想”平台与MuseSteamer;阿里音频驱动全身数字人模型OmniAvatar

    【AI日报】今日AI领域重要动态:1.开源语音大模型Step-Audio-AQAA发布,实现音频到语音的端到端自然转换;2.百度推出"绘想"平台与MuseSteamer,通过AI一键生成专业级视频;3.浙大与阿里联合发布OmniAvatar,音频驱动数字人技术取得突破;4.百度搜索迎十年来最大改版,新增智能框、百看和AI助手功能;5.xAI开发者控制台新增Grok4及Grok4Code引用,预示新一代AI模型即将发布;6.Gemin

  • OPPO首款内置风扇手机!OPPO K13 Turbo跑分出炉:确认骁龙8s Gen4

    这款新机还有一个非常重要的亮点内置风扇手机,这也是OPPO首款自带风扇的手机。 该机后置主摄下方有一个风扇开孔,可以迅速散发内部热量。 风扇模组采用电镀镍工艺,放弃普通喷涂,带来更好的防水、防锈效果,并且号称风力提升120%,从而实现更强、更持久的游戏性能。 第四代骁龙8s的性能大家已经在测试中看到了,采用4nm打造,全大核方案,安兔兔跑分能突破240万�

  • @开发者们:百度文心大模型4.5系列模型开源,国内首发平台GitCode现已开放下载!

    6月30日,百度文心大模型4.5系列正式开源并在国内领先的开源平台GitCode首发上线。该系列包含10款模型,涵盖47B和3B参数的混合专家(MoE)模型及0.3B的稠密参数模型,采用创新的多模态异架构结构实现跨模态知识融合。模型基于飞桨框架开发,训练效率达47% MFU,在文本和多模态基准测试中达到SOTA水平。所有模型按Apache2.0协议开源,配套产业级开发套件支持多种芯片部署。GitCode平台已汇聚620万用户,为AI开发者提供代码托管、协同开发等全流程支持。此次开源将推动中国AI生态创新,加速大模型技术产业化应用。

  • 一场没有“罗永浩”的直播,为百度AI正名

    5500万GMV,这可能是迄今为止,一个AI数字人单次直播带来的最高销量。 过去几年内,数字人直播代替真人主播的传言总是一波又一波,空无一人的直播基地无数手机屏幕“自动地”产生着GMV,这个画面曾经击中了无数网友的心。但现实是,这些数字人们机械重复的动作、无法随机应变的话术反而让真人主播们都松了一口气。 但这次,真正的转折点来了。6月15日,罗永浩数字�