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

标签 python html web-scraping python-requests lxml

我正在从网页中抓取数据以用于 API,并寻找最符合 Python 风格/最合适的方式来执行此操作 - 页面源中有一个名为“markerData”的字典列表,我需要获取纬度和液化天然气值。

数据样本:

"markerData": [{"docEl":null,"lid":0,"clickable":true,"lat":34.0489281,"lng":-111.0937311,"title":"","iconURL":"//assets.bankofamerica.com/images/mapmarker2.png","info":"</div>View all locations in Arizona</a></div></div></div></div></div>"}, {"docEl":null,"lid":1,"clickable":true,"lat":35.20105,"lng":-91.8318334,"title":"","iconURL":"//assets.bankofamerica.com/images/mapmarker2.png","info":"</div>View all locations in Arkansas</a></div></div></div></div></div>"},

我过去曾多次使用 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”列表。

对于为我的经纬度值定义 xpath 的任何帮助,或者关于如何隔离和捕获此数据的任何替代想法,我将不胜感激。

最佳答案

这是我编写的函数,它为我完成了工作,以防它可以帮助处于类似情况的其他人:

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

关于python - 使用 python 从网站上抓取数据列表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959006/

相关文章:

javascript - 使用 Javascript 动态显示输入值

html - 如何修复 CSS 中的子菜单

html - IE8/9 window.postMessage 不工作,但为什么?

html - 使用Excel VBA从网页下载文件

python - 如何在Python中修复这个 "AttributeError"?

java - 使用将 Java 呈现为 String 的 Javascript 获取最终 HTML

python - 为什么轻得多的 Keras 模型在推理时的运行速度与大得多的原始模型相同?

python - OpenCv 链接器错误 : Symbol not found: ___itt_api_version_ptr__3_0

python - 任意深度嵌套循环

python - OpenCV-Python接口(interface)、cv和cv2的性能比较