Las solicitudes de Python dan como resultado que falta una parte de la página web
Frecuentes
Visto 484 veces
0
Estoy tratando de usar solicitudes para enviar un formulario y descargar la página web resultante. El problema es que a la página descargada le falta gran parte de la página que veo cuando lleno el formulario en un navegador.
Estoy tratando de ver un mapa de asientos en aa.com. Obtengo casi todo lo que no sea el mapa de asientos real.
from requests import session
def get_page():
payload = {
'airportLookupRequired': 'true',
'currentCodeForm': 'originAirport',
'currentCalForm': 'viewSeatsForm',
'flightNumber': '1132',
'departureMonth': '9',
'departureDay': '22',
'originAirport': 'dfw',
'destinationAirport': 'lga',
'cabin': 'coach',
'_button_submit': 'GO'
}
with session() as c:
c.post('https://www.aa.com/seatmap/viewSeatsAccess.do', payload)
r = c.get('https://www.aa.com/seatmap/viewSeatsSubmit.do')
print r.content.replace('/content/images', 'https://www.aa.com/content/images')
get_page()
Cualquier sugerencia para solucionar esto o averiguar por qué no funciona sería apreciada.
EDITAR: usando las herramientas del navegador para buscar solicitudes de AJAX, veo
Resource interpreted as Script but transferred with MIME type text/plain: "https://www.aa.com/dwr/interface/SeatMapAjaxUtils.js". viewSeatsSubmit.do:52
Al hacer clic en eso, se accede a:
// Provide a default path to dwr.engine
if (dwr == null) var dwr = {};
if (dwr.engine == null) dwr.engine = {};
if (DWREngine == null) var DWREngine = dwr.engine;
if (SeatMapAjaxUtils == null) var SeatMapAjaxUtils = {};
SeatMapAjaxUtils._path = '/dwr';
SeatMapAjaxUtils.formatAmount = function(p0, p1, callback) {
dwr.engine._execute(SeatMapAjaxUtils._path, 'SeatMapAjaxUtils', 'formatAmount', p0, p1, callback);
}
SeatMapAjaxUtils.getExitRowSeatSelectionResponse = function(p0, callback) {
dwr.engine._execute(SeatMapAjaxUtils._path, 'SeatMapAjaxUtils', 'getExitRowSeatSelectionResponse', p0, callback);
}
que parece ser el código para generar la información que quiero. No sé cómo proceder a partir de ahí.
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python web-scraping python-requests or haz tu propia pregunta.
Lo más probable es que su navegador haya ejecutado algún código JavaScript que carga los datos adicionales a través de AJAX. Use las herramientas de desarrollo de su navegador para ver qué solicitudes AJAX se están realizando. - Martijn Pieters
¿Hay algo que se parezca a datos con formato JSON o HTML que le puedan interesar? Es posible que pueda llamar a esos puntos finales directamente. - Martijn Pieters
Está malinterpretando un recurso de secuencia de comandos regular para una solicitud AJAX. En Chrome, seleccione la pestaña de red y filtre solo por solicitudes XHR. - Martijn Pieters
Tendrás que analizar todos los recursos que el navegador sí descargar entonces. Compare lo que se descarga en la pestaña de red con lo que descarga Python para verificar que recibe la misma información, y luego analice cada recurso en detalle para ver dónde se almacena la información del asiento. - Martijn Pieters
No realmente, es solo sentido común sobre cómo la web funciona. Los navegadores cargan recursos de URL y los combinan en el navegador, interpretando esos recursos. Si eso incluye código ejecutable (por ejemplo, JavaScript), entonces la representación puede cambiar. JavaScript puede solicitar recursos adicionales. La forma en que se representa cada página puede variar salvajemente. No existe una solución única para todos. - Martijn Pieters