python selenium库爬取百度地图两点之间的距离

大致思路

老师布置的一个实验,需要获取30个景点之间的距离。为了学到新知识,以及让工作过程不至于太枯燥,我选择使用爬虫来自动获取两点之间的距离。

爬取要用到selenium库,这是因为百度地图传送两点之间的距离用到了js,而博主对于js传输信息并不熟悉,另外百度地图用的js非常多,要找到相关的js文件也很难。

这时就体现出selenium库的重要性了。selenium库可以模拟鼠标点击,键入等操作。为了保证爬取的准确性,需要获取元素的xpath。

获取xpath

xpath是什么不懂的可以去百度,这里简单说一下怎么获取xpath。在这里先说一下我用的是Chrome浏览器。

Chrome浏览器中获取xpath最笨的方法就是按f12,找到元素的位置后手动确认xpath。当然还有更简单的方法:Chrome浏览器中有一个插件可以帮忙,叫做xpath helper。火狐浏览器中也有类似的插件。

如何安装和使用xpath helper

注意事项

1、有时会出现地址不完全匹配的情况,即输入一个地址后百度地图表示地址不准确,提供若干地址后让你选择一个作为准确地址。解决这个问题需要让搜索的地址尽量准确,另外真的发生这种状况需要进行异常处理。

    try:
        driver.find_element_by_xpath("/html/body[@class='pc']/div[@id='app']/div[@id='left-panel']/ul[@id='cards-level1']/li[1]/div[@class='RouteAddressOuterBkg']/div[@class='RouteAddressInnerBkg']/div[@id='RouteAddress_DIV1']/div[@class='sel_body']/div[@id='RADIV_BODY1']/div[@id='RADiv_ResItem1']/div[@id='RA_ResItem_1']/table/tbody/tr[1]/td[2]").click()
    except:
        a = 1
    time.sleep(0.5)
    try:
        driver.find_element_by_xpath("/html/body[@class='pc']/div[@id='app']/div[@id='left-panel']/ul[@id='cards-level1']/li[1]/div[@class='RouteAddressOuterBkg']/div[@class='RouteAddressInnerBkg']/div[@id='RouteAddress_DIV0']/div[@class='sel_body']/div[@id='RADIV_BODY0']/div[@id='RADiv_ResItem0']/div[@id='RA_ResItem_0']/table/tbody/tr[1]/td[2]").click()
    except:
        a = 1

上面的代码中a=1无意义,只是因为except部分必须要有执行语句,否则会报错。如果大家有更好的方法可以在评论区提出来,感激不尽。

2、有时搜索两点距离会出现bug,这时会显示两点之间没有步行方案。出现这种情况程序会停在那不动,这时就需要进行异常处理:只需要让程序再次点击搜索即可。

try:#超时异常处理
        WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.XPATH, "/html/body[@class='pc']/div[@id='app']/div[@id='left-panel']/ul[@id='cards-level1']/li[1]/div[@id='nav_container']/div[@class='route_contentWrapper walk_cont']/div[@id='route_content_walk']/div[@class='special']/div[@
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值