前言
使用Java HttpClient模拟百度搜索和点击,实现百度SEO优化,在上一篇文章HttpClient模拟百度搜索和点击,模拟百度SEO优化(自动翻页)(一)
中,已经做了研究,结果正如文章的总结所说,百度SEO的原理虽然已经完全清楚了,但是要真正的实现使用Java模拟人工点击,难度可是非常大的。
但是同样,只要是有迹可循的东西,就可以通过细心观察认真总结,搞明白实现的原理,解决问题。人工模拟百度SEO点击,就是如此,好了,话不多说,我们言归正传。
回溯和新的途径
从HttpClient来实现模拟人工点击百度链接,的确是非常有难度的,因为百度返回的缓存,和请求的数据中,是否有加密,加密的算法在哪里,这些都是非常难以查找的,很耗时间和精力,再认真的分析,现有的Java爬虫可以使用的工具,突然有一个方法,闪入脑海,也许很多人都有接触——Java HtmlUnit。
Java HtmlUnit, 被称为Java浏览器的开源实现的一门工具,可以模拟浏览器请求,一般被测试人员广泛使用,但是正好,这门工具,不正是模拟人工点击百度SEO的最佳选择吗,是的,无可厚非。
分析和实现
核心问题,是要实现模拟百度搜索,然后点击搜索到的链接,跳转到需要点击的页面,并且保证整个过程的数据可以被百度统计收集到,首先是模拟百度分页点击的代码,实现如下:
//bIndex是需要点击分页,如果是1,就是1-10也, 如果是2,就是11-20页,可以根据需要调整 HtmlPage mypage = null ; for(int page=(bIndex-1)*10+1; page<=(bIndex)*10; page++) { //keys是百度搜索的关键字, page是页码 String baiduUrls = "https://www.baidu.com/s?wd="+URLEncoder.encode(keys)+"&oq=" +URLEncoder.encode(keys)+"&pn=" + ((page-1)*10) ; mypage = client.getPage(baiduUrls); String txt = mypage.getWebResponse().getContentAsString() ; }
模拟后,根据关键字,网站链接匹配到百度搜索到的连接,这个链接,一般是百度自己的链接,点击后,会通过百度的页面进行自动跳转到我们自己网站的页面。模拟的整个过程,是一个完全模拟手动操作的过程,完全真实,百度无法发现。
模拟点击页面链接的方法如下:
//找到返回的URL的列表的DIV DomNodeList<DomElement> articleas= (DomNodeList<DomElement>)mypage.getElementsByTagName("div"); //挨个循环div元素,匹配是否有keysSear关键词的div,keysSear是网站的链接,或者域名 for(DomElement ast: articleas){ if(ast.getAttribute("class").trim().equals("result c-container") && isContainSiteKeys(ast.asText(), keysSear) ){ try{ //找到后,需要设置WebClient的属性,如下 client.getOptions().setJavaScriptEnabled(true); client.getOptions().setCssEnabled(false); client.setAjaxController(new NicelyResynchronizingAjaxController()); client.getOptions().setTimeout(300000); client.getOptions().setThrowExceptionOnScriptError(false); client.getOptions().setActiveXNative(false); client.getOptions().setThrowExceptionOnFailingStatusCode(false); client.getOptions().setRedirectEnabled(true); client.getOptions().setUseInsecureSSL(true); page2 = ((HtmlAnchor)ast.getChildNodes().get(0).getChildNodes().get(0)).click(); //根据找到的div,拿到 URL clickurls = page2.getUrl().toString() ; //模拟点击 page2 = client.getPage(clickurls); String txt2 = page2.asXml(); //因为点击时一个异步的过程,需要等待HtmlUnit执行完毕,所以这里等待30秒 Thread.sleep(30000) ; System.out.println(txt2); }catch(Exception e){ e.printStackTrace(); } } }
基本模拟完毕后,看看百度统计的结果:
可以看到结果:
好的,到此为止,大功告成,模拟成功。
再下边,分享一些刷百度SEO的效果数据。
复杂问题,就这么简单的解决了。
为此,专门做了一个根据代理IP,刷百度SEO关键词的工具,有需要的童鞋可以联系我额,嘿嘿!
当然,到这里并不意味着结束,由于Java HtmlUnit模拟请求速度较慢,总是需要耗费大量的电脑内存资源,其实Java HttpClient模拟百度SEO才是最完美的解决之道,后边会继续分享,敬请期待:HttpClient模拟百度搜索和点击,模拟百度SEO优化(自动翻页)(三)。