网页源码中数据存在,使用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)
相关推荐
瓜牛呱呱 2020-11-12
柳木木的IT 2020-11-04
yifouhu 2020-11-02
lei0 2020-11-02
源码zanqunet 2020-10-28
源码zanqunet 2020-10-26
一叶梧桐 2020-10-14
码代码的陈同学 2020-10-14
lukezhong 2020-10-14
lzzyok 2020-10-10
anchongnanzi 2020-09-21
clh0 2020-09-18
changcongying 2020-09-17
星辰大海的路上 2020-09-13
abfdada 2020-08-26
mzy000 2020-08-24
shenlanse 2020-08-18
zhujiangtaotaise 2020-08-18
xiemanR 2020-08-17