如何在json中使用beautifulsoup访问对象属性?python

mitkmikd  于 2022-11-19  发布在  Python
关注(0)|答案(2)|浏览(9104)
from bs4 import BeautifulSoup
import fake_useragent
import requests
ua = fake_useragent.UserAgent()
import soupsieve as sv

url = "https://search-maps.yandex.ru/v1/?text=%D0%9F%D0%BE%D1%87%D1%82%D0%B0%20%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8,%20%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80&results=500&type=biz&lang=ru_RU&apikey=d9168899-cf24-452a-95cf-06d7ac5a982b"
r = requests.get(url, headers={"User-Agent": ua.random})
soup = BeautifulSoup(r.text, 'lxml')
print(soup.find("p"))

我想从这个列表中只选择两个属性,如“boundedBy”和“coordinates”我该怎么做呢?我已经检查了整个bs文档,但没有找到解决方案

j8yoct9x

j8yoct9x1#

来自服务器的结果是Json格式的,所以使用json解析器或.json()方法对其进行解码:

import json
import requests

url = "https://search-maps.yandex.ru/v1/?text=%D0%9F%D0%BE%D1%87%D1%82%D0%B0%20%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8,%20%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80&results=500&type=biz&lang=ru_RU&apikey=d9168899-cf24-452a-95cf-06d7ac5a982b"
data = requests.get(url).json()

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

print(data["properties"]["ResponseMetaData"]["SearchRequest"]["boundedBy"])

印刷品:

[[37.048427, 55.43644866], [38.175903, 56.04690174]]
ufj5ltwl

ufj5ltwl2#

使用响应的.json()方法,因为数据是JSON。然后,您可以迭代响应中的要素。注意,您可以将参数与URL分开设置,以便它们可读且更易于更改:

import requests
import json

url = 'https://search-maps.yandex.ru/v1'

params = {'text': 'Почта России, Краснодар',
          'results': 500,
          'type': 'biz',
          'lang': 'ru_RU',
          'apikey': 'd9168899-cf24-452a-95cf-06d7ac5a982b'}

r = requests.get(url, params=params)
if r.ok:
    data = r.json()
    for feature in data['features']:
        x,y = feature["geometry"]["coordinates"]
        (x1,y1),(x2,y2) = feature["properties"]["boundedBy"]
        print(f'coordinates ({x:.6f}, {y:.6f}): bounds ({x1:.6f}, {y1:.6f})-({x2:.6f}, {y2:.6f})')

输出量:

coordinates (38.969711, 45.028356): bounds (38.965656, 45.025508)-(38.973867, 45.031330)
coordinates (38.969660, 45.028365): bounds (38.965656, 45.025508)-(38.973867, 45.031330)
coordinates (38.993199, 45.063675): bounds (38.989012, 45.060879)-(38.997223, 45.066698)
coordinates (39.029821, 45.048676): bounds (39.025753, 45.045304)-(39.033964, 45.051124)
coordinates (38.992736, 45.034352): bounds (38.988590, 45.031496)-(38.996801, 45.037318)
...

相关问题