Necesito raspar el nombre, la latitud y la longitud de la lista de restaurantes de https://food.grab.com/ph/en/restaurants y guardarlos en un csv. Este es un sitio web del tipo 'cargar más': se agregarán 8 restaurantes más en los resultados de búsqueda por cada clic en el botón 'cargar más'.
Cuando inspecciona el elemento, tiene una etiqueta de cuerpo que contiene un div seguido de una lista de etiquetas de script. El siguiente código comienza desde la segunda etiqueta de secuencia de comandos.
<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>Para los restaurantes cargados después de hacer clic en 'cargar más', la información de latitud/longitud parece estar almacenada en un archivo javascript externo almacenado en una etiqueta de script con id=" NEXT_PAGE /restaurants" (o los otros archivos js externos justo debajo).
Soy nuevo en Javascript. Revisé el primer archivo js pero no pude averiguar cómo obtener la información requerida. No pude encontrar ninguna variable con nombres de restaurantes o ubicaciones mencionadas explícitamente. También revisé otros archivos js pero no puedo encontrar nada. No estoy seguro de si debo buscar etiquetas de script en el encabezado. ¿Alguien puede responder esto?
No tiene nada que ver con archivos JavaScript.
JavaScript recibe información relevante mediante el envío de solicitudes http al servidor
Estas solicitudes son visibles
Debes repetir las mismas solicitudes con Python
en devtools, vaya a la pestaña de red, verifique todas las solicitudes. cuando hace clic en cargar más btn, se envía una solicitud a https://portal.grab.com/foodweb/v2/search
ver respuesta en la sección de respuesta es:
{"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-.... obtenga restaurant_id de esta respuesta, cada restaurant_id almacenado con clave de id
luego, cuando hace clic en un restaurante, se envía una solicitud a https://portal.grab.com/foodweb/v2/merchants/2-CYKCVZNZJTDFLE?latlng=14.5995,120.9842
donde 2-CYKCVZNZJTDFLE es restaurant_id
y la respuesta es:
{ "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 } Puedes obtener la latitude y longitude desde aquí.
realice la solicitud https://portal.grab.com/foodweb/v2/search y https://portal.grab.com/foodweb/v2/merchants/{id} con python, pero asegúrese de que todos los encabezados http deben estar lo mismo con los encabezados http que en las herramientas de desarrollo de Chrome