如何从嵌入脚本标记中的外部javascript文件中获取名称、纬度和经度信息



我需要抓取名称、纬度&餐厅列表的经度https://food.grab.com/ph/en/restaurants并将它们保存到csv中。这是"加载更多"类型的网站:每次点击"加载更多的"按钮,搜索结果中就会增加8家餐厅。

当您检查元素时,您有一个body标记,它包含一个div,后面跟着一个脚本标记列表。下面的代码从第二个脚本标记开始。

<script async="" id="__NEXT_PAGE__/restaurants" src="/_next/static/~k5VPZk5KBtLKJOP7fLbR/pages/restaurants.js"></script>
<script async="" id="__NEXT_PAGE__/_app" src="/_next/static/~k5VPZk5KBtLKJOP7fLbR/pages/_app.js"></script>
<script async="" src="/_next/static/chunks/146.5cc25d7743407960833f.js"></script>
<script src="/_next/static/runtime/webpack-562f11f96da3918c3d37.js" async=""></script>
<script src="/_next/static/chunks/styles.4fc2149595e9293ccd52.js" async=""></script>

对于点击"加载更多"后加载的餐厅,纬度/经度信息似乎存储在外部javascript文件中,该文件存储在id="的script标签中NEXT_PAGE/餐馆";(或下面的其他外部js文件(。

我是Javascript的新手。我浏览了第一个js文件,但不知道如何获得所需的信息。我找不到任何明确提到餐厅名称或地点的变量。还浏览了其他js文件,但找不到任何内容。不确定是否应该在标头中查找脚本标记。有人能回答这个问题吗?

它与JavaScript文件无关。

JavaScript通过向服务器发送http请求来接收相关信息

这些请求是可见的

您必须使用Python 重复相同的请求

在devtools中,转到network选项卡,检查所有请求。当你点击加载更多btn请求发送到https://portal.grab.com/foodweb/v2/search

参见响应部分的响应是:

{"searchResult":{"searchID":"910af096fe304265a0f3d4a3e8b5e2d8","totalCount":515,"searchMerchants":[{"id":"2-C2MFREUZN6WKLN","address":{"name":"Wai Ying Fastfood - Binondo [Available for LONG-DISTANCE DELIVERY]"},"latlng":{"latitude":14.602068853150598,"longitude":120.97598854230432},"estimatedDeliveryTime":30,"merchantBrief":{"description":"Prices are all VAT inclusive. Prices may also vary or be subject to change by the merchant.","cuisine":["Asian","Noodles","Quick Bites"],"photoHref":"https://d1sag4ddilekf6.azureedge.net/compressed/merchants/2-C2MFREUZN6WKLN/hero/12a517f18aed4fc7ac9d10ef754193fa_1617944281957721088.jpeg","isIntegrated":true,"openHours":{"open":true,"displayedHours":"08:00-20:00","sun":"08:00-20:00","mon":"08:00-20:00","tue":"08:00-20:00","wed":"08:00-20:00","thu":"08:00-20:00","fri":"08:00-20:00","sat":"08:00-....

从该响应中获取restaurant_id,每个restaurant_id都存储有id密钥

然后,当你点击一家餐厅时,会向https://portal.grab.com/foodweb/v2/merchants/2-CYKCVZNZJTDFLE?latlng=14.5995,120.9842发送一个请求

其中2-CYKCVZNZJTDFLE为‍restaurant_id‍

响应为:

{
"merchant": {
"ID": "2-CYKCVZNZJTDFLE",
"latlng": {
"latitude": 14.6094796,
"longitude": 120.992802
},
"name": "Yellow Cab Pizza - Espana [Available for LONG-DISTANCE DELIVERY]",
....
"businessType": "FOOD",
},
"promotions": null
}

你可以从这里得到latitudelongitude

使用python发出https://portal.grab.com/foodweb/v2/search请求和https://portal.grab.com/foodweb/v2/merchants/{id},但确保所有http标头必须与chrome dev工具中的http标头相同

最新更新