soup.find_all returns 一个空列表,无论我输入什么 class (Google Colab)

soup.find_all returns an empty list regardless of what class I enter (Google Colab)

我知道之前有人问过这个问题,但我找不到在 Google colab(而不是本地)中完成的任何实例。我正在尝试使用请求和 BeautifulSoup 从 API 输出中抓取区域名称和相关的纬度和经度。我的代码如下:

#Importing tools
import numpy as np
import pandas as pd

import requests
import string
from bs4 import BeautifulSoup

import os

#Getting the HTML elements from the URL
URL = "http://api.positionstack.com/v1/forward?access_key=4d197793636f1badcdc02c14da0f8da0&query=London&limit=1"
html = requests.get(URL)
soup = BeautifulSoup(html.content, 'html.parser')


#I went onto the website, inspected it and found that the latitudes, longitudes and place names are in the span.n elements
#I'm grabbing this from the website here and viewing it
soup_k = soup.find_all("span", class_="n")

soup_k

但它只是输出: []

我还尝试了使用 inspect 可以找到的所有其他元素,其中 none return 任何东西。我看到类似问题的解决方案表明元素隐藏在 Javascript 后面,但我认为情况并非如此...

任何关于为什么它 return 是一个空列表的想法或帮助抓取此页面将不胜感激!谢谢

免责声明:我是编码的新手,我试图确保我的术语是正确的并且以正确的方式提出问题,但我仍在学习 - 任何指向正确方向的指示总是受欢迎的

我也遇到过这种情况。 如果将 BS 对象打印为字符串,您可以看到每个 HTML 元素之间有段落符号。 BS将这些段落符号识别为元素,并将其解析为空元素。所以你将检索空元素。

这不是一个网站,它是一个 api 响应 json 而不是 html。所以 BeautifulSoup 不是必需的,只需抓住 json 并选择你的属性:

import requests
URL = "http://api.positionstack.com/v1/forward?access_key=4d197793636f1badcdc02c14da0f8da0&query=London&limit=1"

res = requests.get(URL).json()

res 输出:

{'data': [{'latitude': 51.509648, 'longitude': -0.099076, 'type': 'locality', 'name': 'London', 'number': None, 'postal_code': None, 'street': None, 'confidence': 1, 'region': 'Greater London', 'region_code': None, 'county': None, 'locality': 'London', 'administrative_area': None, 'neighbourhood': None, 'country': 'United Kingdom', 'country_code': 'GBR', 'continent': 'Europe', 'label': 'London, England, United Kingdom'}]}

要访问您的属性:

lat = res['data'][0]['latitude']
lng = res['data'][0]['longitude']
region = res['data'][0]['region']

print(lat,lng,region)

输出:

51.509648 -0.099076 Greater London