网页源码中数据存在,使用selenum却解析不到数据的一种解决方法。
Posted wangxiaowu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网页源码中数据存在,使用selenum却解析不到数据的一种解决方法。相关的知识,希望对你有一定的参考价值。
- 问题描述:使用selenum爬取苏宁易购时,搜索手机时,在浏览器中右键检查都存在的信息,比如价格等信息,在爬虫中解析页面时解析不到数据
- 问题分析:
- 苏宁搜索手机加载页面时使用的是ajax加载的信息
- 在向下滑动时,也在实时加载信息,
- 当访问页面时,不会加载全部的信息,随着页面向下滚动,会持续发送ajax获取信息
- 自己的爬虫程序在解析数据时,页面并没有加载全部的信息,就会出现解析出来的信息为空的情况
- 解决方案:
- 编写js代码,模拟鼠标的滚动时间,直到鼠标滚动到最底部时,再开始解析数据
- 定义页面滚动的函数
def scroll_to_bottom(driver): # 页面滚动到底部
js = "return action=document.body.scrollHeight" # 获取当前页面的高度
# 初始化现在滚动条所在高度为0
height = 0
# 当前窗口总高度
new_height = driver.execute_script(js)
while height < new_height: # 直到滚动到页面最底部,高度不在增加
# 将滚动条调整至页面底部
for i in range(height, new_height, 200):
driver.execute_script(‘window.scrollTo(0, {})‘.format(i))
time.sleep(0.5)
height = new_height # 滚动完成后,跟新现在的高度。
# time.sleep(random.random())
new_height = driver.execute_script(js) # 重新获取页面高度
- 获取页面信息时,调用页面滚动到底部的函数,即可完美拿到整个页面的信息。
def index_page(page):
‘‘‘抓取索引页 :param page: 页码‘‘‘
try:
print(‘正在爬取第‘, page, ‘页‘)
url = ‘https://search.suning.com/%s/‘%(quote(KEYWORD))
url = ‘https://search.suning.com/%s/&iy=0&isNoResult=0&cp=%d‘%(quote(KEYWORD), page)
browser.get(url) # 请求网址
#等待条件:显示当前页号,显式商品
# wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, ‘#mainsrp-pager li.item.active > span‘), str(page)))
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ‘#nextPage‘))) # 等待,直到出现下一页的按钮
scroll_to_bottom(browser) # 页面滚动到底部,拿到完整的页面信息
time.sleep(3)
get_products(page) # 对完整的页面信息进行数据解析
except TimeoutException:
index_page(page)
以上是关于网页源码中数据存在,使用selenum却解析不到数据的一种解决方法。的主要内容,如果未能解决你的问题,请参考以下文章
python爬虫 selenium+phantomjs动态解析网页,加载页面成功,返回空数据