使用python从网站抓取数据列表的最佳方法

时间:2018-06-21 01:07:21

标签: python html web-scraping python-requests lxml

我正在从网页中抓取数据以供API使用,并正在寻找最pythonic /最合适的方式来实现-该页面源代码中有一个名为“ markerData”的词典列表,我需要抓取lat和lng值。

数据样本:

  

“ markerData”:   [{“ docEl”:null,“ lid”:0,“ clickable”:true,“ lat”:34.0489281,“ lng”:-111.0937311,“ title”:“”,“ iconURL”:“ // assets.bankofamerica .com / images / mapmarker2.png“,”信息“:”

查看以下位置的所有位置   亚利桑那
“},   {“ docEl”:null,“ lid”:1,“ clickable”:true,“ lat”:35.20105,“ lng”:-91.8318334,“ title”:“”,“ iconURL”:“ // assets.bankofamerica。 com / images / mapmarker2.png“,”信息“:” 查看以下位置的所有位置   阿肯色州 “},

过去,我已经多次使用python的lxml模块来执行此类任务,但是由于我的'markerData'不是明显的html结构,因此我试图找出最佳的执行方法。具体来说,在下面的函数中,我被困在尝试为我的lat和lng值中的每一个定义tree.xpath。

lats = []
lngs = []

def get_coordinates():

    i = 0

    while i < 35:

            page = requests.get('https://locators.bankofamerica.com/&check_list=4429#')
            tree = html.fromstring(page.content)

            lat = tree.xpath('//div[@id=mapWrap/markerData/lat/text()'.format(i))
            lng = tree.xpath('//div[@id=mapWrap/markerData/lng/text()'.format(i))

            str1 = ''.join(lat)
            str2 = ''.join(lng)

            lats.append(str1)
            lngs.append(str2)

            i += 1

    return lats, lngs

我也无法抗拒感觉到可能会有一种更简单的方法来执行此操作,例如将整个页面源读取到文本文件中并尝试仅获取“ markerData”列表。

对于为我的lat和lng值定义xpath的任何帮助,或者关于如何隔离和捕获此数据的任何其他建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是我编写的函数,可以帮助我完成工作,以防在类似情况下可能对其他人有所帮助:

def get_coordinates():

        page = requests.get('https://locators.bankofamerica.com/&check_list=4429')
        tree = html.fromstring(page.content)

        lat_lng = tree.xpath("//script[contains(., 'markerData')]/text()")
        lat_lng_string = str(lat_lng)
        latitude = re.findall('"lat":\d+\.\d+', lat_lng_string)
        longitude = re.findall('"lng":-\d+\.\d+', lat_lng_string)

        la = re.findall('\d+\.\d+', str(latitude))
        lo = re.findall('-\d+\.\d+', str(longitude))

        coords = dict(zip(la, lo))

        return coords
相关问题
最新问题