爬虫如何应对流式加载页面,这100行代码请收藏!
前篇学委弄了一篇把网站拍照留存,发现截屏的页面是一个流式页面,就截了一部分怎么办?
所谓的流式加载的页面,页面高度是不断变长的,这种页面无法一次加载就获取到整个页面的真实高度!
身边有没有哪些流式加载的页面呢? 比如 CSDN的热榜 没跑了。
这种流式加载窗口就开打开水龙头一样,内容哗啦啦的展示出来,关掉了就不加载。
经常冲榜的朋友就知道,打开热榜,发现就几条Top 5,需要浏览器往下拉,才会继续动态加载更多内容出来。一直往下拉,慢慢拉整个热榜就出来了。
本文实现流程概括如下图:
第一个问题:这这个获取流式窗口高度的操作怎么实现呢?
爬虫怎么开始设置,在前一篇文章,请自行阅读。
下面直击重点,我们怎么样获取动态流式内容窗口的高度。
'''
雷学委应对流式页面的爬虫解决秘诀
核心代码:
'''
def resolve_height(driver, pageh_factor=5):
js = "return action=document.body.scrollHeight"
height = 0
page_height = driver.execute_script(js)
ref_pageh = int(page_height * pageh_factor)
step = 150
max_count = 15
count = 0
while count < max_count and height < page_height:
#scroll down to page bottom
for i in range(height, ref_pageh, step):
count+=1
vh = i
slowjs='window.scrollTo(0, {})'.format(vh)
print('exec js: %s' % slowjs