js抓取网页内容(一个页面通过script加载请求服务端进行统计再输出js进行跳转)
优采云 发布时间: 2022-03-26 21:05js抓取网页内容(一个页面通过script加载请求服务端进行统计再输出js进行跳转)
在这期间,我遇到了一个非常崩溃的问题。一个页面加载脚本请求服务器统计,然后输出js进行跳转。分别分为两步进行统计。
打开页面,通过脚本向远程服务器请求统计,并通过js输出最终重定向到页面的地址。页面获取跳转位置后,通过位置跳转
很简单的事情,但是百度手机搜索有个大问题:
通过百度搜索引擎关键词搜索网页后,第一个请求没有发出,很奇怪。
研究了半天,发现了这个百度手机的自动转码问题
类似于下图的搜索结果,网页已经被JS跳转,导致被百度缓存。下次点击不会进入网站页面,而是直接跳转到第二步的目标页面,导致第一次点击。步数统计失败
// 只是类似这样的链接,下面的链接可能已经失效了
$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';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
$content = curl_exec($curl);
echo htmlentities($content);
curl_close($curl);
通过CURL抓取内容,设置为不跟随跳转,获取第一个请求的输出如下:
看图上三个红色箭头,这是百度自己转码输出的js跳转和meta刷新。他实际上抓住了我跳到的地址。真的很厉害,不知道百度是怎么做到的。实现了第一步的请求,刚放上去的时候只请求了一两次,然后第二天发现一整天都没有请求,说明百度直接跳到搜索结果页,但一点也不。进入网页,缓存跳转地址。
如果你把跳转放在复杂的if判断中或者加上几秒的延迟,我不知道会发生什么。如果是通过分析代码得到的,页面上会有很多js。如果条件在另一个 js 中是动态的,他如何捕获输出?如果不是为了分析js,我跳的时候百度怎么知道?他不可能监视几分钟。
对于站长,可以添加百度自己的协议或者手机适配文件拒绝转码
但是网站不是我的,我无权操作页面的其他部分。我没有解决办法。百度的转码太傻了。
目前没有条件再次测试,很郁闷。. 不过他还是会不定时更新,去掉js跳转后会自动恢复。