关于httpclient用法, post提交,抓取数据不全

问题描述

请教下面纠结的问题: 我用httpclient,post提交参数,抓取指定检索到的的数据(分多个页面,一个页面一次提交请求),大部分抓取的数据都是全的,大概抓取了100左右页面数据,就开始有一页面的数据不全,断断续续,不全的数据是:没有我指定参数提交的检索到的数据(只有静态页面的数据,即:没有业务数据),但是请求返回来的状态是200,也获取不到异常,纠结了好几天;代码:public String clientPost(String urll, String htmlbody) {String[] repParams = htmlbody.split("&");List<NameValuePair> data = new ArrayList<NameValuePair>();HttpPost post = new HttpPost(urll);for (String param : repParams) {data.add(new BasicNameValuePair(param.substring(0,param.indexOf("=")), param.substring(param.indexOf("=") + 1, param.length())));}try {// 参数post.setEntity(new UrlEncodedFormEntity(data, "utf-8"));// execute postHttpResponse response = httpClient.execute(post);if (response.getStatusLine().getStatusCode() == 200) {a++;System.out.println("第:" + a + "次请求成功");HttpEntity entity = response.getEntity();BufferedReader read = new BufferedReader(new InputStreamReader(entity.getContent(), "utf-8"));String currentLine;System.out.println("entity.getContent:"+ entity.getContent().toString().length());StringBuffer buff = new StringBuffer();while ((currentLine = read.readLine()) != null) {buff.append(currentLine);}System.out.println("buff长度:" + buff.length());if (buff.length() < 60000) { //数据不全判断int i = 1;clientPost(urll, htmlbody);System.out.println("第" + (a - i) + "页请求了" + (++i) + "次");} else {String urlContent = post.getURI().getRawPath()+ "rn"+ post.getRequestLine().toString()+ "rn"+ displayInfo(new UrlEncodedFormEntity(data,"utf-8").getContent());logContent(urlContent, buff.toString(), a + ".html");System.out.println("buff:--------------"+ buff.toString().length());return buff.toString();}}} catch (UnsupportedEncodingException e) {e.printStackTrace();logNetErr(e);} catch (ClientProtocolException e) {e.printStackTrace();logNetErr(e);} catch (IOException e) {e.printStackTrace();logNetErr(e);} finally {post.releaseConnection(); httpClient.getConnectionManager().closeExpiredConnections();}return null;}还请各位碰到这样的问题指教下: 问题补充:rommal7090 写道

解决方案

源数据问题,你不一定能捕获到,如果你请求的页面dao报了异常,返回的数据为null,前端页面只是没有数据而已,你完全觉察不到问题很好解决,如果内容有问题的打log
解决方案二:
我认为是网站禁止你抓取的表现。
解决方案三:
不知道你能否把你要抓取的页面发来,让大家一起分析下呢,你的实现代码就不用了。
解决方案四:
问题补充:fslx2008 写道你要抓取的页面是否有ajax的异步数据,页面如果包含这些延迟加载的数据,是不能通过一次抓取得到全部数据的。 这个不对的,异步加载的话,还是会再一次请求的。没看懂你说的意思,我说的不知道你看懂没有,页面中包含通过ajax延迟加载的数据的话,只抓取一次是不能将整个页面的内容取到的,而且从你的问题和代码中也没有关于再一次请求的实现
解决方案五:
既然前100页没有问题,说明代码基本是ok的,数据源的问题可能比较大,这样,你把没有抓到数据的请求打印出来,然后用这些参数去确认一下,看是否能拉到数据,我怀疑是拉不到的。试试吧
解决方案六:
1、到了第100页,他的库里存的数据有问题(比如库里存了带html标签的内容,导致页面标签不闭合),页面没有数据,但是你请求返回的肯定是200,只有一些静态内容。可以用日志打印一下url,手动去请求一下试试2、如果是服务器压力导致的异常问题,你sleep10秒钟再抓一次试试
解决方案七:
服务端没有返回数据的长度?
解决方案八:
哥们,你用httpclient是模拟浏览器访问网页/登录等,这种东西感觉你最好先搞个抓包工具先看访问网页post,get的东西,就能找到你先要的东西了。
解决方案:
判断一定是抓取的页面有ajax请求,当你抓取的时候 ajax还没返回,所以就没抓全
解决方案:
有可能是源数据的问题,应该先确定抓取源的问题
解决方案:
你要抓取的页面是否有ajax的异步数据,页面如果包含这些延迟加载的数据,是不能通过一次抓取得到全部数据的。
解决方案:
你把代码全贴上来看看

时间: 2024-10-27 12:16:54

关于httpclient用法, post提交,抓取数据不全的相关文章

httpclient...-HttpClient登录新浪微博,然后从微博抓取数据,下次登录的时候从cookies获取登录数据

问题描述 HttpClient登录新浪微博,然后从微博抓取数据,下次登录的时候从cookies获取登录数据 如题 小的刚入职场,领导让实现这样的功能,求各位大大指导一下 解决方案 先用浏览器登录,勾选记住密码,同时用fiddler抓包 HttpClient照着模拟,特别注意提交的cookie 解决方案二: http://blog.sina.com.cn/s/blog_75a4f95a0101ebs1.html 解决方案三: http://abandontofree.blog.sohu.com/2

spring mvc设置定时器,如何每分钟从前台jsp页面抓取数据?

问题描述 spring mvc设置定时器,如何每分钟从前台jsp页面抓取数据? spring mvc设置定时器,如何每分钟从前台jsp页面抓取数据?从后台抓取,而不是表单提交的.请知道的回答. 解决方案 用httpclient类.不要表单提交就用gethttp://blog.csdn.net/dj4kobe/article/details/6019650

利用Jsoup解析网页及抓取数据的简单应用

最近一直在公司利用爬虫技术,去抓取一些网页查询网站备案信息,刚开始使用HttpClient 和 jericho (这两个也挺好用你可以去测试一下).但是后来发现了Jsoup,他和Jquery很相似,在搜节点上使用的技术几乎相似.所以凡是使用过Jquery的都可以去尝试使用Jsoup去解析抓取数据.下面举个例子我们去抓去所有公交车的信息(哥是郑州的哈). 在解析之前你需要jar包,你可以去http://jsoup.org/直接下载.如果使用maven更方便 只需引进依赖 例如 <dependenc

从网页抓取数据的一般方法

首先要了解对方网页的运行机制 ,这可以用httpwacth或者httplook来看一下http发送和接收的数据.这两个工具应该说是比较简单易懂的.这里就不再介绍了.主要关注的内容是header和post的内容.一般会包括cookie,Referer页面和其他一些乱其八糟可能看不懂的变量,还有就是正常交互的参数,比如需要post或者get的querystring所包含的东西. httplook和httpwacth网上有很多下载的,这里推荐使用httpwach,因为可以直接嵌入到ie中,个人觉得这个

使用Scrapy抓取数据

Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自互联网): Scrapy主要包括了以下

php通过curl添加cookie伪造登陆抓取数据的方法_php技巧

本文实例讲述了php通过curl添加cookie伪造登陆抓取数据的方法.分享给大家供大家参考,具体如下: 有的网页必须登陆才能看到,这个时候想要抓取信息必须在header里面传递cookie值才能获取 1.首先登陆网站,打开firebug就能看到对应的cookie把这些cookie拷贝出来就能使用了 2. <?php header("Content-type:text/html;Charset=utf8"); $ch =curl_init(); curl_setopt($ch,C

jsoup ip封锁-jsoup 抓取数据如何解决 IP封锁

问题描述 jsoup 抓取数据如何解决 IP封锁 jsoup 抓取 数据 如何 解决 爬取 网站 的 IP封锁 解决方案 使用Jsoup 异步抓取页面的数据使用jsoup从网站抓取数据使用Jsoup抓取数据 解决方案二: 这你得看对方网站的反爬虫机制了,不同的网站反爬虫机制不同

伪造COOKIE及来源地址进行远程提交抓取内容的函数

    '********************************************************************************    'Function(公有)    '名称:    远程抓取函数    '作用:    利用XMLHTTP远程抓取数据    '参数:    sMethod --- 发送方式     '    sUrl ------ 目标地址    '    iMode ----- 返回内容类型:0为二进制,1为文本,2为cookie,3

ajax-php采集高手进:利用curl模拟登录抓取数据遇到json调用问题不成功,求助!

问题描述 php采集高手进:利用curl模拟登录抓取数据遇到json调用问题不成功,求助! 我在抓取一个页面的信息(假设a.php),这个页面只是一些基本的html框架,其他关键信息是通过ajax请求(b.php)回来的,返回的是json,然后在通过页面js将json解析,绘制到页面上.问题的关键是ajax请求的信息里有个手机号码需要登录后才显示完整,原网站利用ajax请求b.php获得json数据,如果直接访问b.php也是可以直接得到:{"name":"zhangsan&