Почему возвращается только один результат

Python и vsCode с использованием API карт Google Я скопировал программу от человека в Интернете, чтобы найти все предприятия в моем районе, но возвращенные данные не кажутся правильными.

Сначала я попытался выполнить поиск по ключевому слову, и это дало много результатов, но не тот тип бизнеса, который я хотел. Я удалил эту переменную и вместо нее использовал переменную opennow. Это дало только один результат, и это был город, в котором я искал, а не бизнес. Не могли бы вы просмотреть код и посмотреть, не ошибся ли я?

API

map_client = googlemaps.Client(API_KEY)

location = (54.970121, -2.101585)
distance = (1)
business_list= []

response = map_client.places_nearby(
    location=location,
    radius=distance,
)

business_list.extend(response.get('results'))
next_page_token = response.get('next_page_token')

while next_page_token:
    time.sleep(2)
    response = map_client.places_nearby(
        location=location,
        radius=distance,
        opennow=True,
        page_token=next_page_token
    )
    business_list.extend(response.get('results'))
    next_page_token = response.get('next_page_token')

df = pd.DataFrame(business_list)
df['url'] = 'www.google.com/maps/place/?q=place_id:' + df['place_id']
df.to_excel('Toby Buisness.xlsx', index=False)`

Большое спасибо

Вам нужно использовать opennow=True в первом запросе перед циклом.

Barmar 05.01.2023 19:20

Вы каким-либо образом храните данные в своем excel? Я надеюсь, что вы храните только идентификаторы мест или координаты (в течение 30 дней), потому что это противоречит их Условиям использования. cloud.google.com/maps-platform/terms/maps-service-terms/…

Yrll 06.01.2023 02:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш радиус для поиска поблизости слишком мал для поиска чего-либо еще

Я надеюсь, что вы найдете время, чтобы прочитать документацию Places API , а также клиентскую библиотеку Python для Google Maps, чтобы лучше понять код, который вы скопировали.

Теперь причина, по которой он возвращает только один результат, заключается в том, что у вас есть это: distance = (1). Эта переменная используется в вашем ответе как значение параметра radius в вашем map_client.places_nearby.

Если вы читали Клиентскую библиотеку Python, там написано:

радиус (целое число) — расстояние в метрах, в пределах которого смещаются результаты.

И глядя на ваш код, это означает, что ваш радиус поиска только в 1 meter. Это объясняет, почему вы возвращаете только один результат, потому что никакое другое место не находится в пределах досягаемости, кроме места в пределах его диапазона 1 метра, и если вы не указали ни одного type, конечно, он вернет название окрестности, в которой он находится. В вашем случае Hexham UK.

Поэтому я попробовал ваш код и использовал радиус 1000 meters и получил более 1 результата. Вот пример кода:

import googlemaps

map_client = googlemaps.Client('YOUR_API_KEY_HERE')

location = '54.970121, -2.101585'
distance = 1000
business_list = []

response = map_client.places_nearby(
    location=location,
    radius=distance,
    type='restaurant'
)

business_list.extend(response.get('results'))

print(len(business_list))

Как я уже говорил, прочтите документацию, потому что параметр opennow, который вы использовали, недействителен, а правильный — open_now. Также вы можете попробовать использовать параметр type, который я использовал в своем примере, для поиска конкретных результатов.

Вот ссылка на список типов, которые вы можете использовать в поиске поблизости: Таблица 1 Типы мест.

Наконец, убедитесь, что ваш вариант использования находится в рамках их Условий обслуживания (в случае извлечения/кеширования данных Google Maps), чтобы избежать проблем с вашим приложением в будущем. Поскольку я не эксперт в области права, предлагаю вам прочитать их условия по этим ссылкам: 3.2.3 Ограничения на неправомерное использование услуг / Особые условия API Places.

Надеюсь, это поможет!

Большое спасибо, теперь у меня есть рабочий код!

I_March1127 07.01.2023 09:50

Другие вопросы по теме