1
meik2333 2018-12-16 09:36:29 +08:00 1
可以在 get 请求的一个 TCP 连接中,先读取 Content-Length 然后再继续读数据内容,这样只用 get 一次。
|
4
csx163 OP @meik2333 哦,抱歉问题没有描述清楚,意思是判断 Content-Length 小于 10kb 就不下载了,大于 10kb 就下载页面,目前 10kb 以下的页面占 40%左右,body 页面 500kb 至 2000kb 不等,不考虑带宽的情况下,纯粹为了爬取的隐蔽性,是不是预先读取 head 会好一些?
|
5
meik2333 2018-12-16 11:52:39 +08:00
@csx163 这...看你自己的想法吧...
requests 底层是复用了 tcp 连接的,一般来说一次请求是可以获得多于 10kb 的数据的。也就是说,你 head 一次和 get 一个 10kb 的页面都是一次传输。反而之前一次请求的现在需要两次,更可能被封。 为了隐蔽性的话,一般的可以随机 UA 之类的,如果对方有反爬机制的话,可以上代理。 |
6
summerwar 2018-12-16 14:43:48 +08:00
requests 有个 stream 参数,看下那个
|
7
otakustay 2018-12-16 15:37:20 +08:00
用稍微底层一些的库,get head 和 response 不冲突,response 应该是一个 stream,当你拿到 header 的时候这个 stream 还没开始读,这个时候判断一下,需要的就读 stream,不需要的就直接断掉
|
8
imn1 2018-12-16 16:29:01 +08:00
如果只是隐蔽性没必要
多一次请求和连接隐蔽性更差 不想浪费带宽内存还说得过去,判断<10k 就关闭连接,不继续读取 |
9
goofool 2018-12-16 16:46:04 +08:00 via Android
head 请求
|