htmlunit抓取动态网页(爬取一个动态网页刷新问题,解决方案如下思路使用 )

优采云 发布时间: 2022-02-18 07:01

  htmlunit抓取动态网页(爬取一个动态网页刷新问题,解决方案如下思路使用

)

  更新。. . . . 这个动态网页其实可以直接抓取ajax请求。这很简单。之前觉得很复杂 虽然也实现了,效率极低,不过没关系。这是对 Selenium 的学习。

  1.我最近在爬动态网页。为了更新页面,需要选择不同的选项,即处理下拉框。这里的下拉框是一个假的通过输入实现的下拉框,但是他还有一个隐藏的选择,我原本以为隐藏的选择会用js脚本修改变为可见,然后点击等操作,但是使用网上的方法后,发现选择可见可见,但是点击后没有效果,各方搜索无果,最后决定自己解决这个问题,解决方法如下

  想法用selenium完全模拟人类操作,一步一步点击可见按钮

  , 1、找到下拉框按钮,点击,

  二、点击下拉框按钮后,会出现一个列表,在列表中定位一个元素,点击。注意这一步必须在下拉框按钮被点击后进行(使用time.sleep()等待几秒,否则会提示点击的内容不存在)

  通过这两步,我们可以改变动态网页的信息,代码如下

  def getButton(browser):

# 获取下拉框按钮

Button = browser.find_elements_by_class_name("textbox-icon") # 定位哪一栋楼按钮

buildButton = Button[0]

floorButton = Button[1]

buildingsAndFloors = browser.find_elements_by_class_name("combobox-item") # 楼选项

floors = buildingsAndFloors[30:]

buildings = buildingsAndFloors[:30]

info = dict()

info['floors'] = floors

info['buildings'] = buildings

info['buildButton'] = buildButton

info['floorButton'] = floorButton

return info

  

  2.另外,在爬取的时候,经常会提示点击按钮或者不存在的东西,所以一定要设置延迟。

  3.某些动态网页的源代码与您在使用 f12 的网页上看到的不同。我的解决方法是先对网页进行操作,然后获取源码,就正常了

  4.动态网页存在不断刷新的问题,但是每次刷新后都会提示旧元素不能使用,所以必须重新获取不能使用的信息,如下,getButton( )函数获取Button信息,每次页面刷新后需要点击按钮时再次获取。

  # 获取某一栋楼某一层的信息所对应页面的源代码

def getSoup(buildNumber, floor):

info = getButton(browser)

info['buildButton'].click() # 点击指定楼

info['buildings'][buildNumber].click()

time.sleep(1)

info = getButton(browser) # 重新获取信息

time.sleep(1)

info['floorButton'].click() # 点击指定楼层

info['floors'][floor].click()

soup = BeautifulSoup(browser.page_source, 'html.parser')

return soup

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线