m0_68306032 2022-12-24 18:48 采纳率: 80%
浏览 45
已结题

Python爬虫获取经纬度

之前没学过爬虫,课题需要爬取上海市充电桩分布数据,根据别人的代码无法输出具体的经纬度。请问各位错在哪里?

import requests
import re
from pyquery import PyQuery as pq
from selenium import webdriver

browser = webdriver.Chrome(r'。。。')
kv = {'user-agent':'Mozilla/5.0'}
url = "http://admin.bjev520.com/jsp/beiqi/pcmap/do/pcMap.jsp?"
latter = "name=上海"
browser.get(url+latter)
browser.switch_to.frame('left')   # iframe标签的name属性,最重要的一步
doc = pq(browser.page_source)
items = doc.find('.news-l .news-ul li a').items()
name = []
pos = []
urls = []
for item in items:
    urls.append("http://admin.bjev520.com" + item.attr('href'))
    name.append(item.find('p').text())
    pos.append(item.find('span').text())
import json
from urllib.request import urlopen, quote
import requests
def getlnglat(address):
    url = 'http://api.map.baidu.com/geocoding/v3/'
    output = 'json'
    ak = 'Iam9F3Gs6X03afWINMasrAdqCowF1cbx' # 百度地图ak,具体申请自行百度
    address = quote(address) # 由于本文地址变量为中文,为防止乱码,先用quote进行编码
    uri = url + '?' + 'address=' + address  + '&output=' + output + '&ak=' + ak + '&callback=showLocation'
    r = requests.get(uri)
    tx = r.text
    lng = re.findall(r'"lng":(\d+.\d+)', tx)
    lat = re.findall(r'"lat":(\d+.\d+)', tx)
    if lat:
        return lat[0], lng[0]   # 纬度 latitude   ,   经度 longitude  ,
    else:
        return (0, 0)
    print(lat[0],lng[0])

  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2022-12-24 19:12
    关注

    从你提供的代码来看,首先爬取的页面是从上海的充电桩的信息,然后用 pyquery 来解析页面,得到了一个包含了所有充电桩信息的 items 列表。在循环中,解析了每个充电桩的名称和位置,并将它们分别放入 name 和 pos 列表。

    但是我看不出你在代码中使用了 getlnglat 这个函数,也就是说,你没有调用百度地图 API 来获取经纬度。你需要将这个函数调用加入到循环中,在循环内调用 getlnglat 函数,将 pos 列表中的位置作为参数传入,并将获取到的经纬度数据存入一个新的列表。

    这样就可以使用爬取的数据并通过百度地图 API 获取经纬度了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月1日
  • 已采纳回答 12月24日
  • 修改了问题 12月24日
  • 创建了问题 12月24日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵