python 为什么只返回一个结果

ss2ws0br  于 2023-04-19  发布在  Python
关注(0)|答案(1)|浏览(128)

Python和vsCode,使用谷歌MapAPI我从互联网上的一个人那里复制了一个程序来查找我所在地区的所有企业,但返回的数据似乎不正确。
我第一次尝试通过关键字搜索,这返回了很多结果,但不是我想要的业务类型。我删除了这个变量,而是使用了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)

非常感谢

nkhmeac6

nkhmeac61#

您的附近搜索半径太小,无法搜索其他内容

我希望你能花时间阅读Places API documentation和Google Maps的Python客户端库,以便更好地理解你复制的代码。
现在它只返回一个结果的原因是因为你有这个:distance = (1)。此变量在响应中用作map_client.places_nearby上的参数radius的值。
如果你读了Python客户端库,它说:

  • radius(int)-偏差结果的距离(以米为单位)。*

看看你的代码,这意味着你的搜索半径只有1 meter。这就解释了为什么你只返回单个结果,因为***除了1米范围内的地方***,范围内没有其他地方,如果你没有指定任何type,它当然会返回它所在的附近的名称。在你的例子中,赫克瑟姆UK。
所以我尝试了你的代码,并使用了半径1000 meters,得到了多个结果。下面是示例代码:

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场所类型。
最后,请确保您的用例在其服务条款的范围内(在抓取/缓存GoogleMap数据的情况下),以避免您的应用程序在未来出现问题。由于我不是法律的Maven,我建议您花时间阅读这些链接中的条款:3.2.3禁止滥用服务/ Places API特定条款。
我希望这有帮助!

相关问题