问题描述
http://jiuxu.taobao.com/比如我想爬取上面页面的所有宝贝链接如<ahref="http://item.taobao.com/item.htm?spm=a1z10.1.w5003-8452167994.1.fVp17O&id=40416742109&scene=taobao_shop"target="_blank"data-spm-wangpu-module-id="5003-8452167994"data-spm-anchor-id="a1z10.1.w5003-8452167994.1"><imgsrc="http://img02.taobaocdn.com/imgextra/i2/50090008/TB2j6UraXXXXXaUXpXXXXXXXXXX_!!50090008.jpg"width="621"height="442"border="0"alt=""></a>我想要http://item.taobao.com/item.htm?spm=a1z10.1.w5003-8452167994.1.fVp17O&id=40416742109&scene=taobao_shop这个内容HttpUtils没有渲染页面功能所以直接就放弃了(而且的确也抓不出我想要的内容)在使用htmlUnit渲染页面的时候发现获得tbody内的信息不完整原因经过查询相关资料大致了解:因为有的js内容需要浏览器滚动下拉才会加载请问我要如何模拟浏览器的滚动下拉来加载页面上所有的js?参数设置如下://1启动JSwebClient.getOptions().setJavaScriptEnabled(true);//2禁用Css,可避免自动二次請求CSS进行渲染webClient.getOptions().setCssEnabled(false);//3启动客戶端重定向webClient.getOptions().setRedirectEnabled(true);//4js运行错誤時,是否拋出异常webClient.getOptions().setThrowExceptionOnScriptError(false);//5设置超时webClient.getOptions().setTimeout(50000);HtmlPagehtmlPage=webClient.getPage(url);//等待JS驱动dom完成获得还原后的网页webClient.waitForBackgroundJavaScript(10000);//网页內容/*System.out.println(htmlPage.asXml());*/webClient.closeAllWindows();returnhtmlPage.asXml();然后http://zarakara.tmall.com/这个页面用上述方法根本渲染不出所需的宝贝链接已经尝试过各种方法包括python下面的phantomjs+casperjs虽然可以解析但是依然无法加载下面的内容还有什么百度蜘蛛谷歌蜘蛛。
解决方案
解决方案二:
这类脚本都比较复杂,实际上你很难搞到一个比较完备的脚本引擎。可以考虑用WebKit后台执行该页面,也就是用真正的浏览器来解析页面,然后抓取内容;缺点是开销较高。
解决方案三:
引用1楼ldh911的回复:
这类脚本都比较复杂,实际上你很难搞到一个比较完备的脚本引擎。可以考虑用WebKit后台执行该页面,也就是用真正的浏览器来解析页面,然后抓取内容;缺点是开销较高。
嗯哼,你说的方法试过,但是依然会遇到我上面说的问题:不向下滚动页面去激活那些js就无法获得里面的内容我前段时间用的Selenium+chromeDriver就是跟你类似的方法吧
解决方案四:
可以代码触发浏览器的滚动条下滚。不过总的来说是代价比较高。还有个方案:是研究并分析出该页面在发生滚动后,究竟向服务器发出了什么新的请求,是怎么增量刷出其它内容的。然后直接用程序去构造这个新的HTTP请求。不过这个方案估计难度不小。
解决方案五:
引用3楼ldh911的回复:
可以代码触发浏览器的滚动条下滚。不过总的来说是代价比较高。还有个方案:是研究并分析出该页面在发生滚动后,究竟向服务器发出了什么新的请求,是怎么增量刷出其它内容的。然后直接用程序去构造这个新的HTTP请求。不过这个方案估计难度不小。
多谢和同事讨论了一下决定放弃改用人工手工收集信息(这个成本比较小
解决方案六:
哈哈。不过以前也碰到项目最后决定还是人工算了的,性价比不合适。
解决方案七:
我猜多数行不通。淘宝这样的大公司肯定有防爬虫的机制。
解决方案八:
http://bbs.aliyun.com/read/169222.html?displayMode=1有没有遇到这样的问题,在win平台下或是本地eclipse下调试可以获取商品,但是部署在阿里云centos下却不可以