html response 的status是200,但是为啥返回的response不是完整的呢?

问题描述

我在爬虫的时候,有时候会碰到这个问题,明明status是ok的,但是返回的结果却是不完整的。特别是碰到爬取下一页链接的时候,常常就因为这个问题导致后面几页的网页不能跟进,损失了很多数据。求大神赐教啊~~~

解决方案

解决方案二:
200跟contentlength没有关系。你如果看到contentlength比你收到的body的字节数多很多,这才算是“不完整”。
解决方案三:
另外,就算是contentlength比你收到的body中的字节数多很多,服务器端对于本次连接“关闭了”,那么状态200也是对的。规范就是如此,200就是这个意思。它跟你收到的消息体中你逻辑上判断的“是否完整”性是没有关系的。
解决方案四:
200只是代表Http请求是正确的响应了,然后你所谓的结果不完整是什么意思,是跟打开后浏览到的不一样?那这要看是不是load后有js加载数据
解决方案五:
你先用httpfiddler抓包跟一下rquest和response
解决方案六:
谢谢!应该没有js加载数据。不好意思,我这里没有说明白,我说的不完整主要是下面两点:1.responsebody里面几乎没有内容2.我用xpath提取response里的数据时,有时候会报'Response'objecthasnoattribute'xpath'这个错上面两个问题并不是一直出现的,时有时无。我用了一批网上的代理ip,不是太稳定,可能跟这个有关。但是一般有问题会都抛错,这种statusok的我就不知道怎么处理了
解决方案七:
引用3楼starfd的回复:

200只是代表Http请求是正确的响应了,然后你所谓的结果不完整是什么意思,是跟打开后浏览到的不一样?那这要看是不是load后有js加载数据

我查看了一下body,说是Yourbrowsedoesnotsupportframe我用了下面这些useragent,看不出问题在哪里。。。"Mozilla/5.0(X11;Linuxi686)AppleWebKit/537.31(KHTML,likeGecko)Chrome/26.0.1410.43Safari/537.31","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.17(KHTML,likeGecko)Chrome/24.0.1312.60Safari/537.17","Mozilla/5.0(Macintosh;IntelMacOSX10_8_2)AppleWebKit/537.17(KHTML,likeGecko)Chrome/24.0.1309.0Safari/537.17","Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.2;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;MediaCenterPC6.0)","Mozilla/5.0(Windows;U;MSIE7.0;WindowsNT6.0;en-US)","Mozilla/5.0(Windows;U;MSIE6.0;WindowsNT5.1;SV1;.NETCLR2.0.50727)","Mozilla/6.0(WindowsNT6.2;WOW64;rv:16.0.1)Gecko/20121011Firefox/16.0.1","Mozilla/5.0(X11;Ubuntu;Linuxi686;rv:15.0)Gecko/20100101Firefox/15.0.1'","Mozilla/5.0(WindowsNT6.2;WOW64;rv:15.0)Gecko/20120910144328Firefox/15.0.2","Mozilla/5.0(Windows;U;WindowsNT6.1;rv:2.2)Gecko/20110201","Mozilla/5.0(X11;U;Linuxi686;en-US;rv:1.9a3pre)Gecko/20070330","Mozilla/5.0(Macintosh;U;IntelMacOSX10.6;en-US;rv:1.9.2.13;)Gecko/20101203","Opera/9.80(WindowsNT6.0)Presto/2.12.388Version/12.14","Opera/9.80(X11;Linuxx86_64;U;fr)Presto/2.9.168Version/11.50","Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;de)Presto/2.9.168Version/11.52","Mozilla/5.0(Windows;U;Win9x4.90;SG;rv:1.9.2.4)Gecko/20101104Netscape/9.1.0285","Mozilla/5.0(Macintosh;U;PPCMacOSXMach-O;en-US;rv:1.8.1.7pre)Gecko/20070815Firefox/2.0.0.6Navigator/9.0b3","Mozilla/5.0(X11;U;Linuxi686;en-US;rv:1.8.1.12)Gecko/20080219Firefox/2.0.0.12Navigator/9.0.0.6",
解决方案八:
我正在爬http://news.sohu.com/scroll/这个网页,不知道为什么这个网页在scrapyshell调试时viewrepsonse出来的是空白网页,所以我的所有xpath都匹配不出内容!和浏览器看到的不一样!我想是不是跟你遇到的问题一样?请问你有答案了么?
解决方案九:
换个useragent试试;
解决方案十:
楼主你没见过网页开了一半卡住了吗?

时间: 2024-08-01 18:31:56

html response 的status是200,但是为啥返回的response不是完整的呢?的相关文章

jsp中调用Java文件中的方法,status显示200通了,但是一直打不出日志,也查不出数据,求帮助

问题描述 下面是Java文件:packagecom.xsm.home.screen.onlinepay;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;i

cache策略实现的原理(200、304返回码含义)

什么是cache? 定义:浏览器缓存(Browser Caching)是为了加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览. cache的作用: 1.减少延迟,让你的网站更快,提高用户体验.2.避免网络拥塞,减少请求量,减少输出带宽.   页面内容Cache策略: 目前我们业务的JS.css.静态页面文件和图片等资源放在imgcache域名机器上,是由运维人员在apache上统一设置缓存策略.前台通过H

Scrapy response 请求200 但是返回的页面不完整

问题描述 Scrapy response 请求200 但是返回的页面不完整 python 爬虫抓取数据时,请求状态码200,但是返回的页面信息不完整 解决方案 一般这种情况是页面本身是异步加载的,所以你拿到了200,但是页面内容其实是ajax等异步填充进去的数据.目前这种页面你需要用selenium等带有webdriver的模块来抓取

Android 网络请求详解

我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的.如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient,而 Android 中主要提供了上述两种方式来进行 HTTP 操作.并且这两种方式都支持 HTTPS 协议.以流的形式进行上传和下载.配置超时时间.IPv6.以及连接池等功能. 但是 Googl e发布 6.0 版本的时候声明原生剔除 HttpClient,但是笔者认为 HttpClient 会提

针尖上带着脚镣跳舞的widget

自从iOS 10苹果给widget做了一次大改版后,很多人都开发了自己的widget.网上也有很多教程,来告诉你怎么快速开发一个widget.我的这篇文章也不会重复那些简单的创建extension添加证书之类的东西.我们要深入地看一下widget到底应该做成什么样子. 你真的了解widget的尺寸吗 首先widget由两种状态 typedef NS_ENUM(NSInteger, NCWidgetDisplayMode) {      NCWidgetDisplayModeCompact, //

两款REST测试工具

用CURL命令行测试REST API 无疑是低效率的,这里把最近使用的两款 Chrome 插件总结下 POSTMAN 简单易用 REST Console 功能强大 使用的话用POSTMAN就够用了,但是我更喜欢 REST Console ,因为她的功能非常强大和全面,一下子就能让你搞清楚你在做的事情,你用不到的功能也可以帮助你更加了解 REST, http请求的过程. 下面是两个的截图界面 1. POSTMAN 测试工具 1. Authorization Basic Auth Digest Au

JSP内建对象

js|对象 ① out - javax.servlet.jsp.jspWriter   out对象用于把结果输出到网页上. 方法:1. void clear() ;   清除输出缓冲区的内容,但是不输出到客户端. 2. void clearBuffer() ;   清除输出缓冲区的内容,并输出到客户端. 3. void close() ;   关闭输出流,清除所有内容. 4. void flush() ;   输出缓冲区里面的数据. 5. int getBufferSize() ;   获取以k

JSP 九大内置对象

① out - javax.servlet.jsp.jspWriter    out对象用于把结果输出到网页上. 方法: 1. void clear() ;    清除输出缓冲区的内容,但是不输出到客户端. 2. void clearBuffer() ;    清除输出缓冲区的内容,并输出到客户端. 3. void close() ;    关闭输出流,清除所有内容. 4. void flush() ;    输出缓冲区里面的数据. 5. int getBufferSize() ;    获取以

用asp实现文件浏览、上传、下载的程序_应用技巧

可以放在服务器上,对服务器上的文件进行浏览.上传.下载,可下载文件源码. 把下所有代码入在一个文件里即可,文件的后缀要为asp. 复制代码 代码如下: <%  thedir = request("thedir")  if thedir = "" then   folderini = server.mappath(".")&"\"  else   folderini = server.mappath(thedir)