这段时间碰到个很崩溃的问题,一个页面通过 script 加载请求服务端进行统计再输出js进行跳转,分为两个步骤分别统计,

  1. 打开页面通过script 请求远程服务器进行统计并输出要通过js使页面跳转的最终地址。
  2. 页面获取跳转地之后通过 location 进行跳转

很简单一个事情,但在百度移动搜索上出了个大问题:

通过百度搜索引擎关键词搜索到网页后,只跳转了却没有进行第一步请求,非常奇怪。

研究了半天才发现这个百度移动的自动转码问题

类似下图搜索结果,网页上被投放过JS跳转,导致被百度缓存,下次点击将不会再进入网站页面而是直接跳转到了第二步的目标页面,导致第一步统计失效

  1. // 只是类似这样的链接,下面的链接可能已经失效了
  2. $url = 'http://m.baidu.com/from=0/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401320_1001%2Cta%40iphone_2_4.3_3_534/baiduid=637EBC50744C1291B831A26D208F44D8/w=0_10_%E7%A6%81%E4%B9%A6%E5%A4%A7%E5%85%A8%E9%9B%86/t=iphone/l=3/tc?ref=www_iphone&lid=13212517736186082851&order=1&vit=osres&tj=www_normal_1_0_10_title&m=8&srd=1&cltj=cloud_title&dict=32&title=%E5%8D%81%E5%A4%A7%E7%A6%81%E4%B9%A6%E4%B9%8B%E5%B0%91%E5%B9%B4%E9%98%BF%E5%AE%BE%E7%9B%AE%E5%BD%95%2C%E5%8D%81%E5%A4%A7%E7%A6%81%E4%B9%A6%E4%B9%8B%E5%B0%91%E5%B9%B4%E9%98%BF%E5%AE%BE%E6%9C%80%E6%96%B0%E7%AB%A0%E8%8A%82...&sec=8191&di=e644ac04d0707d79&bdenc=1&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_zRPQGjm95qshbWxBcNiV8KhVinHVZy';
  3. $curl = curl_init($url);
  4. curl_setopt($curl, CURLOPT_HEADER, true);
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  6. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
  7. $content = curl_exec($curl);
  8. echo htmlentities($content);
  9. curl_close($curl);

通过CURL进行抓取内容,设置为不跟随跳转,获取第一次请求输出的内容如下:

看图上三个红色箭头,这是百度自己转码输出的js跳转加 meta refresh 两种跳转代码,他居然把我跳转的地址直接抓取了,真牛比,不知道百度是怎么实现的,导致第一步的请求只有刚放上去的时候请求过一两次,然后第二天一整天发现都没有被请求过,说明百度是在搜索结果页面直接跳转的,而根本没有进入网页,将跳转地址给缓存了。

如果把跳转放在个复杂的 if 判断里面或者 加个 几秒钟的延迟不知道会怎么样,如果是分析代码得出的话,那页面上的js超级多,要是条件在另一个js里面动态输出的他又怎么抓,如果不是分析js,百度怎么可能知道我什么时候跳转呢,他不可能一直监听几分钟吧,

对于站长来说可以增加百度自身的协议或手机适配文件来拒绝被转码

但网站并不是我的,我也无权操作页面其他部分,完全无解了,百度这个转码太坑爹了

目前也没有条件再进行测试,很是郁闷。。不过他还是会隔段时间进行更新的,撤掉js跳转后也会自动恢复

百度移动搜索自动转码太坑爹,JS跳转地址会被抓取的更多相关文章

  1. jquery input 搜索自动补全、typeahead.js

    最近做个一个功能需要用到自动补全,然后在网上找了很久,踩了各种的坑 最后用typeahead.js这个插件,经过自己的测试完美实现 使用方法:在页面中引入jquery.jquery.typeahead ...

  2. 百度UEditor编辑器关闭抓取远程图片功能(默认开启)

    这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发,坑娘啊............... 问题又来 ...

  3. Springboot+Vue实现仿百度搜索自动提示框匹配查询功能

    案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...

  4. 百度网盘采集源码 ,直接采集网盘添加cookies功能

    名称:百度网盘采集源码 程序语言:php 数据库:mysql 程序介绍: 1.直接采集百度网盘url 2.前端基于bootstrap 3.搜索考虑到后期上亿数据,是基于coreseek,搜索时间毫秒级 ...

  5. 转:jmeter性能测试---登录百度进行搜索

    在做web程序性能测试时,loadrunner和jmeter是两款常用的工具,两者比较起来,jmeter非常轻巧,且开源免费,上手快.这里简单介绍下jmeter的使用,以登录百度进行搜索为例. jme ...

  6. 百度贴吧自动回帖的两种方式,使用requests(urllib2)和selenium两种方式回帖

    本文介绍,回复贴吧指定某楼层主的帖子的方法.在这里不介绍无限发主贴和无限回复主贴的方法,无限发主题帖会爆吧,引起别人的反感,并且很容易遭到吧主的封杀:无限回主题帖,会让整个帖子的每楼的回复充满了自己的 ...

  7. 使用python抓取百度搜索、百度新闻搜索的关键词个数

    由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...

  8. java 抓取百度根据关键词搜索域名

    package baidusearch; import com.sun.glass.ui.SystemClipboard; import java.util.*; import java.util.H ...

  9. SEO -- WordPress怎设置百度站长链接自动提交

    百度站长平站更新了主动推送(实时)推送的方式,受到了广大站长的好评,但是对于使用WordPress的网站来说怎么设置自动提交呢,在这里介绍一种比较简单且有效的方法.我们可以使用 WP BaiDu Su ...

随机推荐

  1. N个骰子的点数和的概率分布

    程序设计思路: 假设有n个骰子,关键是需要统计每个点数出现的次数.首先分析第一个骰子点数和有1到6的点数,计算出1到6的每种点数 的次数,并将结果用一个数组pos1记录.然后分析有两个骰子时, 点数为 ...

  2. PHP gbk转换成utf8

    /** * GBK ASCII 转换成utf8 */ public function to_utf8($str){ $detect = array('ASCII', 'GBK', 'UTF-8'); ...

  3. linux 之 getopt_long()

    文件 #include <getopt.h> 函数原型 int getopt_long(int argc, char * const argv[], const char *optstri ...

  4. 【转】CSS中position属性( absolute | relative | static | fixed )详解

    我们先来看看CSS3 Api中对position属性的相关定义: static:无特殊定位,对象遵循正常文档流.top,right,bottom,left等属性不会被应用. relative:对象遵循 ...

  5. 使用 Entity Framework Code First

    使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...

  6. Struts2更改配置文件struts.xml默认路径

    struts2配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下. 但是为了协作开发与方便管理,我们有时需要把struts.xml放到其他位置 s ...

  7. No object in the CompoundRoot has a publicly accessible property named

    No object in the CompoundRoot has a publicly accessible property named 'typeid' (no setter could be ...

  8. 虚拟化平台cloudstack新版本的调试

    虚拟化平台cloudstack(7)——新版本的调试 调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 源码下载及 ...

  9. QSQL导出mapfile和mapfile中PostGIS连接的一点心得

    昨天弄QSQL导出mapfile,一直遇到下图的错误 原因是QGIS在渲染图层时候使用了新的符号,在图层上右键-属性,如下图将符号修改就OK了 然后我尝试使用QGIS连接本机PostGIS数据,结果老 ...

  10. openssh6.7.deb download packed for debian7/ubuntu12.04 amd64

    openssh the openssh-server on debian7/ubuntu12.04 is too old and out of date. so now we replace and ...