【问题标题】:How to scrape latitude longitude from java script如何从javascript中抓取经纬度
【发布时间】:2020-07-16 11:53:19
【问题描述】:

我对 BeautifulSoup4 还很陌生,无法从 javascript 中提取纬度和经度值。该文件很长,我必须准备所有纬度经度的数据框

Java 脚本文件将包含如下字符串:

var marker_9795626cfd584471ab4406d756a00baf = L.marker([19.041691972000024, 72.85052482000003],{}).addTo(feature_group_ad623471194f451d9f1cf7fc718747c5);

此处的标记 ID 为 - 9795626cfd584471ab4406d756a00baf 纬度为 - 19.041691972000024 经度是 - 72.85052482000003

如何使用 BeautifulSoup 从字符串中提取标记 id、纬度和经度。

【问题讨论】:

    标签: javascript python beautifulsoup pandas-groupby


    【解决方案1】:

    这是 JavaScript 脚本,所以 BeautifulSoup 不会执行/解析它。您可以使用re 模块获取信息。

    例如:

    重新导入

    txt = '''var marker_9795626cfd584471ab4406d756a00baf = L.marker([19.041691972000024, 72.85052482000003],{}).addTo(feature_group_ad623471194f451d9f1cf7fc718747c5);'''
    
    marker_id, lat, lon = re.search(r'marker_([a-f\d]+).*?\[(.*?), (.*?)\]', txt).groups()
    
    print(marker_id)
    print(lat)
    print(lon)
    

    打印:

    9795626cfd584471ab4406d756a00baf
    19.041691972000024
    72.85052482000003
    

    编辑:要从文件中解析变量,您可以使用此脚本:

    import re
    
    with open('<YOUR FILE>', 'r') as f_in:
        for line in f_in:
            m = re.search(r'marker_([a-f\d]+).*?\[(.*?), (.*?)\]', line)
            if m:
                marker_id, lat, lon = m.groups()
                print(marker_id, lat, lon)
    

    EDIT2:新版本:

    import re
    
    with open('<YOUR FILE>', 'r') as f_in:
        data = f_in.read()
    
    for marker_id, lat, lon in re.findall(r'marker_([a-fA-F\d]+).*?\[(.*?),\s*(.*?)\]', data):
        print(marker_id, lat, lon)
    

    【讨论】:

    • 谢谢。另外,我怎样才能将它用于整个文件,而不仅仅是 txt 变量?该文件很长,并且有许多坐标可以以相同的格式提取。如何使用're'模块提取所有这些?
    • 嘿,上面的结果没有打印标记 ID 和坐标。这段代码虽然适用于第一个条目。有没有办法在每次提取条目时将其转换为数据帧,从而将所有内容打印到数据集中。
    【解决方案2】:

    如果 all 你需要从那个字符串中分离出这两个数字,试试这个:

    def parse(text):
       return [float(i) for i in text.split('[', 1)[1].split(']', 1)[0].split(', ')]
    
    long_lat = parse(your_string_var)
    

    编辑: 哦,要获得这样的 id,应该这样做:

    def parse2(text):
       return text.split('_', 1)[1].split(' ', 1)[0]
    
    id = parse2(your_string_var)
    

    【讨论】:

    • 谢谢。另外,我怎样才能将它用于整个文件,而不仅仅是第一个条目?该文件很长,并且有许多坐标可以以相同的格式提取。如何使用这种方法将它们全部提取出来?
    • 您可以尝试将文件中的文本逐行拆分,然后隔离您感兴趣的行(例如您感兴趣的行以"var marker_"开头,或类似的东西,发挥创意),然后将这些行输入 parseparse2 函数以获得您的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多