动态网页抓取(爬取一个动态网页刷新问题,解决方案如下思路使用 )
优采云 发布时间: 2021-10-19 06:20动态网页抓取(爬取一个动态网页刷新问题,解决方案如下思路使用
)
更新。. . . . 这个动态网页其实可以直接抓取Ajax请求。这很简单。之前觉得很复杂。虽然已经实现了,但是效率极低,不过还好。只需将其视为对硒的研究。
1. 最近在爬动态网页。为了更新页面,需要选择不同的选项,即对下拉框进行处理。这里的下拉框是一个用输入实现的假下拉框,但后面还有一个。一个隐藏的select,本来想用js脚本修改隐藏的select变为可见,然后点击等操作,但是使用网上的方法后,发现select是visible变为visible的,但是之后没有效果点击 ,各方搜索无果,最后决定自己解决这个问题。解决方法如下
思路是用selenium完全模拟人的操作,一步一步点击可见按钮
,一,找到下拉框按钮,点击,
其次,点击下拉框按钮后,会出现一个列表。在列表中找到一个元素并单击。注意这一步一定要在下拉框按钮点击后进行(使用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