scraping requests examples example and python post web-scraping python-requests

requests - scraping beautifulsoup python



las solicitudes de Python fallan las consultas posteriores: ¿cookies? (2)

Estoy intentando ejecutar esta post pero recibo el server error 500 :

import requests base_url = "https://www.assurland.com/ws/CarVehiculeSearch.asmx" url = "%s/%s"% (base_url,"GetCarBodyTypeListByCarAlim") pars ={"CarAlim":"DIES","CarType": "A7", "CodeMake": "AUDI", "FirstDrivingDate": "2015-09-22"} with requests.Session() as s: r = s.post(url,data=pars) print r.status_code ## 500

Creo que necesito establecer cookies u otra cosa.

Gracias de antemano por cualquier ayuda.


La mayoría de los puntos de acceso API en ese sitio parecen estar rotos. No hay nada de malo en tu código per se. Realmente no puedo hacer que el sitio responda a ninguna solicitud en su propia interfaz web , incluso cuando se usa un navegador común .

La documentación principal de la API detalla (en francés) que también puede usar el protocolo SOAP para crear consultas; Python tiene varias bibliotecas de SOAP cliente de las que puede elegir.

Sin embargo, tampoco he tenido suerte en hacer que eso funcione. Utilizando la excelente biblioteca zeep intenté acceder al GetMainCarMakeListByFirstDrivingDate final GetMainCarMakeListByFirstDrivingDate más GetMainCarMakeListByFirstDrivingDate (tenga en cuenta que tuve que usar un objeto datetime() para modelar la marca de tiempo):

>>> from zeep import Client >>> client = Client(''https://www.assurland.com/ws/CarVehiculeSearch.asmx?WSDL'') >>> client.service.GetMainCarMakeListByFirstDrivingDate(FirstDrivingDate=datetime(2015, 9, 22)) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/client.py", line 25, in __call__ self._op_name, args, kwargs) File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 109, in send return self.process_reply(client, operation_obj, response) File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 145, in process_reply return self.process_error(doc, operation) File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 223, in process_error detail=fault_node.find(''detail'')) zeep.exceptions.Fault: <exception str() failed>

una Fault es el equivalente SOAP de un error de 500 aquí.

Cuando habilito el registro de depuración , podemos ver que el servidor está teniendo problemas para generar una respuesta:

>>> client.service.GetMainCarMakeListByFirstDrivingDate(FirstDrivingDate=datetime(2015, 9, 22)) zeep.transports: HTTP Post to https://www.assurland.com/ws/CarVehiculeSearch.asmx: <?xml version=''1.0'' encoding=''utf-8''?> <soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:Body> <ns0:GetMainCarMakeListByFirstDrivingDate xmlns:ns0="http://tempuri.org/"> <ns0:FirstDrivingDate>2015-09-22T00:00:00</ns0:FirstDrivingDate> </ns0:GetMainCarMakeListByFirstDrivingDate> </soap-env:Body> </soap-env:Envelope> zeep.transports: HTTP Response from https://www.assurland.com/ws/CarVehiculeSearch.asmx (status: 500): <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Le serveur n''a pas pu traiter la demande. ---&gt; Erreur lors de la génération du document XML. ---&gt; Le type common.FormDataListItem n''était pas attendu. Utilisez l''attribut XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus statiquement.</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope> Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/client.py", line 25, in __call__ self._op_name, args, kwargs) File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 109, in send return self.process_reply(client, operation_obj, response) File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 145, in process_reply return self.process_error(doc, operation) File "/Users/mjpieters/Development/venvs/-2.7/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 223, in process_error detail=fault_node.find(''detail'')) zeep.exceptions.Fault: <exception str() failed>

Escondido allí está el mensaje de error:

Le serveur n''a pas pu traiter la demande. ---> Erreur lors de la génération du document XML. ---> Le tipo common.FormDataListItem n''était pas attendu. Utilice el atributo XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus statiquement.

o, con alguna ayuda de Google Translate, en inglés:

El servidor no pudo procesar la solicitud. ---> Error al generar el documento XML. ---> No se esperaba el tipo common.FormDataListItem. Utilice los atributos XmlInclude o SoapInclude para especificar los tipos que no se conocen estáticamente.

Como no estamos enviando ningún tipo common.FormDataListItem , y el mensaje se queja de que no se pudo generar ningún documento XML, esto se parece a un error de programación del lado del servidor.

Hay métodos que sí funcionan, ya sea a través de SOAP:

>>> client.service.GetCarTypeListByCodeMake(CodeMake=''BMW'', FirstDrivingDate=datetime(2016, 1, 1)) [''I3'', ''I8'', ''M2'', ''M3'', ''M4'', ''M5'', ''M6'', ''SERIE 1 II'', ''SERIE 2'', ''SERIE 3 VI'', ''SERIE 4'', ''SERIE 5'', ''SERIE 6'', ''SERIE 7'', ''X1'', ''X3'', ''X4'', ''X5'', ''X6'', ''Z4''] >>> client.service.GetAllCarTypeListByCodeMake(CodeMake=''BMW'') [''1502'', ''1600'', ''1602'', ''1800'', ''1802'', ''2000'', ''2002'', ''2500'', ''3,0'', ''3,3'', ''315'', ''316'', ''318'', ''320'', ''323'', ''324'', ''325'', ''328'', ''330'', ''518'', ''520'', ''523'', ''524'', ''525'', ''528'', ''530'', ''535'', ''540'', ''545'', ''550'', ''628'', ''630'', ''633'', ''635'', ''645'', ''650'', ''725'', ''728'', ''730'', ''732'', ''733'', ''735'', ''740'', ''745'', ''750'', ''760'', ''840'', ''850'', ''I3'', ''I8'', ''L7'', ''M2'', ''M3'', ''M4'', ''M5'', ''M535'', ''M6'', ''M635'', ''SERIE 1'', ''SERIE 1 II'', ''SERIE 2'', ''SERIE 3'', ''SERIE 3 (SUITE)'', ''SERIE 3 VI'', ''SERIE 4'', ''SERIE 5'', ''SERIE 6'', ''SERIE 7'', ''X1'', ''X3'', ''X4'', ''X5'', ''X6'', ''Z1'', ''Z3'', ''Z4'', ''Z8'']

o mediante la publicación de application/x-www-form-urlencoded datos con requests :

>>> response = requests.post(''https://www.assurland.com/ws/CarVehiculeSearch.asmx/GetCarTypeListByCodeMake'', data={''CodeMake'': ''BMW'', ''FirstDrivingDate'': datetime(2016, 1, 1)}) >>> print(response.text) <?xml version="1.0" encoding="utf-8"?> <ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> <anyType xsi:type="xsd:string">I3</anyType> <anyType xsi:type="xsd:string">I8</anyType> <anyType xsi:type="xsd:string">M2</anyType> <anyType xsi:type="xsd:string">M3</anyType> <anyType xsi:type="xsd:string">M4</anyType> <anyType xsi:type="xsd:string">M5</anyType> <anyType xsi:type="xsd:string">M6</anyType> <anyType xsi:type="xsd:string">SERIE 1 II</anyType> <anyType xsi:type="xsd:string">SERIE 2</anyType> <anyType xsi:type="xsd:string">SERIE 3 VI</anyType> <anyType xsi:type="xsd:string">SERIE 4</anyType> <anyType xsi:type="xsd:string">SERIE 5</anyType> <anyType xsi:type="xsd:string">SERIE 6</anyType> <anyType xsi:type="xsd:string">SERIE 7</anyType> <anyType xsi:type="xsd:string">X1</anyType> <anyType xsi:type="xsd:string">X3</anyType> <anyType xsi:type="xsd:string">X4</anyType> <anyType xsi:type="xsd:string">X5</anyType> <anyType xsi:type="xsd:string">X6</anyType> <anyType xsi:type="xsd:string">Z4</anyType> </ArrayOfAnyType>

Probablemente tengas que contactar a los mantenedores de esta API para resolver esto, esto no es algo en lo que puedas trabajar en Python.


El problema es el formato de fecha mal manejado en el sitio.

Ese error 500 lleva esta descripción:

Erreur lors de la g&#233;n&#233;ration du document XML. ---> Le type common.FormDataListItem n&#39;&#233;tait pas attendu. Utilisez l&#39;attribut XmlInclude ou SoapInclude pour sp&#233;cifier les types qui ne sont pas connus statiquement.

Pruébelo desde su navegador en su página para una depuración más fácil de usar: https://www.assurland.com/ws/CarVehiculeSearch.asmx?op=GetCarBodyTypeListByCarAlim

Nota: "attribut XmlInclude ou SoapInclude pour spécifier les types qui ne sont pas connus statiquement"

Así que intenté hacer una pequeña búsqueda para ingresar la fecha en otro formato.

Como ejemplo:

Fri, 19 Jan 2001

o 19 Jan 2001

Obtiene la solicitud 200 OK , en este caso, un resultado vacío.

Lamentablemente, después de cierto año, parece que el formato tampoco se acepta: el 22 de septiembre de 2001 da 200 OK, pero el 22 de septiembre de 2015 no más, hasta el 2008-12-31.

Prueba con otro formato de fecha y hora ... Pero parece que hay algo allí ... toma otro sitio :)