用 requests 抓取网页代码的时候,出现了一个怪异的现象。(只能获取到尾巴部分)

2016-05-20 08:42:42 +08:00
 daiv

环境先说明一下。 我已经模拟了 cookies + headers 。(和浏览器一摸一样)

用浏览器打开的源代码是: (就是没有<head>和<body>,算是js调用的一个小框框)

<ul class="" 
data-a="0.00"
data-b="222"
data-c="0"> 
<li class="xxx"> <a href="javascript:void(0);" class="removeX">删除</a>&nbsp;test
</button> </a> </li> </ul>

而我用 request 打开却只有

</button> </a> </li> </ul>

最后一点点。

我还用 urllib2 尝试,效果也一模一样

更奇怪的是:

用 requests 或 urllib2 获取的时候 response headers 里面 content-length 和浏览器那是一样的。

获取到的内容长度一样,可惜得到的内容只有尾巴那一点点呀,,,

请大家帮忙支招,谢谢!

3266 次点击
所在节点    问与答
26 条回复
heaton_nobu
2016-05-20 08:56:24 +08:00
可能前面的内容是 ajax 获取后添加上去的
daiv
2016-05-20 08:58:54 +08:00
@heaton_nobu 如果是 ajax 行为,我用 charles 和 chrome F12 能看到呀。
mystryl
2016-05-20 09:07:44 +08:00
你打开 request.text 的语句是啥
daiv
2016-05-20 09:12:19 +08:00
@mystryl
```python
s = requests.Session()
s.cookies.update(cookies)
s.headers.update(headers)
r = s.get(url, verify=False)
print r.headers
print r.content
print r.text
```
daiv
2016-05-20 09:14:22 +08:00
@mystryl print requests.get(url, headers=headers).content (不用 session 也尝试了,这次吧 cookies 放进 headers 里面)
效果一样,还是只有尾巴
cdwyd
2016-05-20 09:16:56 +08:00
应该是 js 生成的吧, ctrl+u 看看是不是和你抓取的一样。
daiv
2016-05-20 09:21:24 +08:00
@cdwyd view-source 看到的就是我说的:
<ul class=""
data-a="0.00"
data-b="222"
data-c="0">
<li class="xxx"> <a href="javascript:void(0);" class="removeX">删除</a>&nbsp;test
</button> </a> </li> </ul>

这是全部内容,根本没有 JS 。
fork3rt
2016-05-20 09:33:53 +08:00
网址发来看看
notgod
2016-05-20 09:35:51 +08:00
gzip
daiv
2016-05-20 09:41:48 +08:00
@notgod Requests 会自动为你解码 gzip 和 deflate 传输编码的响应数据。 如果 gzip ,会显示乱码的
daiv
2016-05-20 09:57:41 +08:00
@fork3rt http://gg.gg/secreturl (一会回复就不要贴网址,谢谢!帮同学研究的)
fork3rt
2016-05-20 10:22:03 +08:00
@daiv 用 terminal 执行后可以正常获取,你是用的 Pycharm 的 console 看的吧?
daiv
2016-05-20 10:23:48 +08:00
@fork3rt 对,我是用 pycharm console 看的
misaka19000
2016-05-20 10:23:57 +08:00
F12 看到的是生成好的源代码

真正的源代码需要在网页上右击 → 查看源代码
Cynic222
2016-05-20 10:24:18 +08:00
@daiv 同样正常结果

Out[9]: u'<ul class="betSlip full-text " \rdata-ub="0.00"\rdata-txr="0,-1,0,1,1#"\rdata-tcm="0"\rdata-bsuis="0" \rdata-xrte="1" \rdata-xrte-us="1"\rdata-stk-inc="0-2*2#2-250*10#250-500*10#500-1000*10#1000-2500*10#2500-5000*50#5000-10000*100#10000-25000*100#25000-50000*100#50000-99999999*100"\rdata-stk-mlt-inc="0-0.1*0.1#0.1-250*1#250-500*5#500-1000*10#1000-2500*50#2500-5000*100#5000-10000*100#10000-25000*100#25000-50000*100#50000-99999999*100"\rdata-isocode="RMB"\rdata-betguid=""\rdata-cus="N"> <li class="betslipHeader"> <a href="javascript:void(0);" class="removeAll">\u5168\u90e8\u5220\u9664</a> <div class="betslip-select" data-text="\u6a19\u6e96\u6295\u6ce8\u55ae"> <div id="BetSlipTypeSelectorWrapper"><div id="BetSlipTypeSelector">\u6a19\u6e96\u6295\u6ce8\u55ae</div></div> <div id="BetSlipTypesWrapper"> <div id="BetSlipTypeArrowTip"></div> <ul id="BetSlipTypes"><li data-item="1">\u6a19\u6e96\u6295\u6ce8\u55ae<span class="selected"></span></li><li data-item="2">Bankers\u5f0f\u6295\u6ce8</li></ul> </div> <select class="bet-slip-type" disabled="disabled" ><option selected="selected" value="1">\u6a19\u6e96\u6295\u6ce8\u55ae</option><option value="2">Bankers\u5f0f\u6295\u6ce8</option></select> </div> </li> <li class="emptyBetslip "><ul><li>\u8acb\u9ede\u64ca\u8ce0\u7387\u6dfb\u52a0\u6295\u6ce8</li></ul></li><li class="bsError feedBack hidden "> <div class="content"> <div class="image"><span class="icon"></span></div> <div class="text"></div> </div> </li><li id="pro" class="feedBack hidden"> <a href="javascript:void(0);" class="placeBetProgress abetslipBtn" data-atype="plc"><button><span class="buttonTextNoMessage">\u6b63\u5728\u8655\u7406\u4e2d</span><span class="buttonSmallSpinnerNoMessage"></span></button></a> </li> <li class="footer"> <span id="totalStake"></span> <a href="javascript:void(0);" class="acceptChanges abetslipBtn hidden"> <button>\u63a5\u53d7</button></a> <a href="javascript:void(0);" class="placeBet abetslipBtn failed-min-odds" data-atype="plc" > <button> <span class="totalStake"></span>&nbsp;<span class="isocode"></span>&nbsp;\u6295\u6ce8\r</button> </a> </li> </ul>'
fork3rt
2016-05-20 10:24:54 +08:00
@daiv

f = open("1.txt", "a+")
f.write(res.text.encode('utf-8'))
f.close()

文本里也是有内容的。 pycharm 的 console 经常坑爹的。。
daiv
2016-05-20 10:28:18 +08:00
@fork3rt 非常感谢你的提示,我用
print co[:1000]
或者
print '{}'.format(co)
这样的方式来打印就可以看。
daiv
2016-05-20 10:33:08 +08:00
@fork3rt 你的提醒后,发现时 pycharm 的 console 的坑。 第一次遇见这个坑
daiv
2016-05-20 10:33:28 +08:00
@Cynic222 现时 pycharm 的 console 的坑。 第一次遇见这个坑
daiv
2016-05-20 11:06:53 +08:00
@Cynic222 你使用什么进行输出的。 (我用 pycharm 的 console 有坑)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/279923

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX