相似文件
换一批
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
我需要爬取砂土车这个网页上那些车的信息。网页初始状态下时有很多小黄车车,鼠标点击某一个车时就会出现一个小弹窗,里面有这个车的一些信息(Vehicle、Age Range、source date等等)。请问怎样才能爬取所有小黄车的信息呢?
我最开始的思路是用rselenium 和rvest 包,然后:
1. remDr$findelement() 定位到单个小黄车的图片上面
2. 然后clickelement() 模拟左键点击
3. 利用小车的xpath 和html_nodes() 和html_text() 函数来实现爬取并获得该车信息
4. 再用findelement和clickelement模拟点击关闭弹窗的按钮
5. 循环以上操作直到所有车都被爬到
这是我写的部分代码:
#打开网页
remDr = remoteDriver(remoteServerAddr="localhost",port=4444L,browserName="chrome")
remDr$open(silent = T)
url = "https://www.arcgis.com/apps/webappviewer/index.html?id=2de764a9303848ffb9a4cac0bd0b1aab"
remDr$navigate(url)
#模拟鼠标点击小车,打开弹窗信息栏
image_button = remDr$findElement('xpath', value = "//*[@id='TSWT_VehiclesAndTrail_2020_1393_layer']/*[name()='image']")
image_button$clickElement()
#爬取信息栏信息
webpage <- read_html(remDr$getPageSource()[[1]])
data <- webpage %>% html_nodes(".attrValue") %>% html_text()
data
这是我的
但是实际操作起来发现有一些问题。首先没有点弹窗的初始状态下,每个小车的image的结构如下所示:
<svg>
<g id = xxx>
<image></image>
<image></image>
<image></image>
.
.
</g>
</svg>
虽然每个小车的image有各自独有的xPath,但是由于某些原因,可能是因为处在一个多层结构里,直接在findElement()放image的xPath会报错,查询了一些资料后发现可以改变xpath写法,先定位到<g>,再在后面加/*[name()='image']来实现。但是这种方法只能适用于缩放到屏幕上只有一个车,如果有多个车,就定位不了。我试过
remDr$findElement('xpath', value = "//*[@id='TSWT_VehiclesAndTrail_2020_1393_layer']/*[name()='image']")[[1]]
但这样写,会报错,说明在最后加[[1]]这种做法并不能实现从多个小车image中定位到某特定小车image的效果。
所以我想请教一下如何我这种方法是否可行?或者说有没有其他比较简单的做法可以直接获得所有小车弹窗内的内容,而不用不停地模拟点击打开,爬信息,模拟点击关闭这种比较麻烦的触发弹窗?
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝