使用requests_html的render滚动加载页面数据失效如何解决?
代码存在3个核心问题
- 你手动初始化了独立的
HTML(html=ses.text)对象,这个对象不会跟随ses.html.render()的执行更新内容,所有动态渲染后的内容只存在于ses.html实例中,你手动创建的html对象一直是最开始请求返回的静态源码 item_list是你在render执行前就查询出来的静态结果,不会自动同步页面更新后的内容,render执行完成后需要重新调用find方法查询元素scrolldown=100时搭配的sleep=0.1时间过短,页面滚动后接口请求还没返回、内容还没渲染完成就停止等待了,会导致内容加载不全
修正后可正常运行的代码
from requests_html import HTMLSession keyword = '유산균' n = 1 url = f'https://search.shopping.naver.com/search/all?frm=NVSHATC&origQuery={keyword}&pagingIndex={n}&pagingSize=80&productSet=total&query={keyword}&sort=rel×tamp=&viewType=list' session = HTMLSession() ses = session.get(url) # 直接用ses.html操作,不要手动创建独立HTML对象 item_list = ses.html.find('div.basicList_title__3P9Q7') print(len(item_list)) # 此时输出为初始加载的5条 # 调整滚动次数和sleep时长保证内容加载完成 ses.html.render(scrolldown=20, sleep=1) # render完成后重新查询元素 item_list = ses.html.find('div.basicList_title__3P9Q7') print(len(item_list)) # 此时会输出加载完成的80条
内容的提问来源于stack exchange,提问作者chissup
相关产品推荐
相关产品推荐

