关于请求百度返回 “百度安全验证” 的解决方法

问题所在

百度的查询请求长这样: https://www.baidu.com/s?wd=words 。正常情况下,还会在后面跟上一长串参数,像这样:

https://www.baidu.com/s?wd=words&rsv_spt=1&rsv_iqid=0xac7f6a9300063414&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=dotnetcore%2520%25E6%25B7%25BB%25E5%258A%25A0%25E6%2596%2587%25E6%259C%25AC%25E6%2596%2587%25E4%25BB%25B6&inputT=153&rsv_t=ab72NEuBMxgAPxIQAd1OFSMlVSlVrgWYPIom4n3LPfxosntsaHRAdSMfJZj7l5UmVd4%2F&rsv_pq=a6123d6c0000a96c&rsv_sug3=68&rsv_sug2=0&rsv_sug4=2218

获得这样的查询地址,我们可以轻易通过构造URL,即替换其中的关键字 “words”, 来使程序在百度上检索关键字。

但这样做真的可以吗?实际上使不可以的!百度大概率会给你返回一个标题为“百度安全验证”的网页,就算加了UAreferer也不行,因为它判定你是机器人。

解决办法

当然,你可以通过请求后面的参数和百度斗智斗勇。我们也可以想办法绕过它。

百度有个功能叫“高级搜索”,在此处https://www.baidu.com/gaoji/advanced.html

当你在上面进行搜索的时候,它产生了这样的一个URL:

https://www.baidu.com/s?q1=words&q2=&q3=&q4=&rn=10&lm=0&ct=0&ft=&q5=&q6=&tn=baiduadv

可以很容易发现,这个请求没有任何冗余的参数,全都是与界面上一一对应的。通过它,就能避免与百度搜索的常规请求进行没有意义的“斗智斗勇”。

这个接口请求多次,也不会返回“百度安全验证”的页面,从而使我们的程序也能愉快地使用百度搜索进行查询。

并且,两种操作,检索到的数据是完全一样的,展示如下:

发表评论

%d 博主赞过: