Forum >> Principianti >> Requests.post continua a darmi come response 405 (Method not allowed)

Pagina: 1

Ciao a tutti,
premetto che non sono un programmatore ma un giurista con un hobby alternativo (almeno per la categoria).

Ciò detto, mi trovo davanti al seguente problema.

Vorrei automatizzare la ricerca delle sentenze della cassazione che ora sono disponibili gratuitamente online. Il sito è quello riportato nel codice.

import requests

url = "http://www.italgiure.giustizia.it/sncass/"

test_query = "1235/2012"

payload = {"searchterm": test_query, "estremi": ""}

resp = requests.post(url, payload)

print(resp)

Continuo, come da titolo, a ricevere errore 405. Non capisco dove sia l'errore nel codice.

Una volta risolto ciò, avrò un altro problema: i risultati compariranno sotto la ricerca, senza caricare una nuova pagina. A quel punto come fare per fare scraping? Devo usare Session()?

Grazie in anticipo e perdonate l'ignoranza!
Ciao caro, il 405 ti sta dicendo che stai usando la risorsa in maniera inappropriata. Probabilmente stai usando un metodo non permesso, ad
esempio questo accade quando si usa il metodo GET per inviare dati da
presentare con un metodo POST o viceversa.

Da quanto capisco stai cercando di interagire con quel form che indichi nel link, ed allora potresti usare Mechanize o similari, più adatti allo scopo specifico.

Cya
Ciao, grazie per la risposta.
Volevo infatti provare con mechanize, non foss'altro che a quanto vedo non è supportato per python3 (dopo l'import dà errore: ImportError: No module named '_version')
Ho appena visto che però Mechanize è stato "unito" con BeautifoulSoup per dar vita a "MechanicalSoup". Ora provo a studiarmelo e vedere che ne cavo.

Posterò il risultato (oppure un'altra richiesta di aiuto :dont-know:)
Posterò il risultato (oppure un'altra richiesta di aiuto :dont-know:)

Certo, intanto buono studio.

Cya
Dunque, piccoli progressi. Ma credo mi sfugga qualcosa.
Sto usando il modulo mechanicalsoup. Questo è il codice:

import mechanicalsoup, re

def fetchfile(query):

url = "http://www.italgiure.giustizia.it/sncass/"

browser = mechanicalsoup.Browser()
page = browser.get(url)
search_form = page.soup.find("form", {"id": "z-form"})
search_form.find("input", {"id":"searchterm"})["value"] = query
response = browser.submit(search_form, url)

print(response)

print("1235" in response.text)

fetchfile("1235/2012")
Il passo avanti è che response è un bellissimo 200, ma purtroppo al rapido controllo "1235" in response.text ottengo False.


Che l'input form sia quello giusto; sono sicuro al 99%:

<input accesskey="p" autocomplete="off" class="keylist" data-arg="text" data-placeholder=" Parole o Numero/Anno sentenza" data-role="query" id="searchterm" style="width:16em; border:solid 1px #a9a9a9; border-radius:4px; vertical-align:bottom; /*font-size:.9em*/" tabindex="0" title="ricerca per parole o estremi"/>
Infatti, guardando il sorgente pagina dal browser viene graficamente evidenziato proprio quell'elemento.

Ho le seguenti perplessità:

- può essere che non funziona perché l'input form non ha come attributo nativo "value"? ho visto che in altri input form c'è, ma dovrebbe essere un argomento passato di default col submit, o sbaglio?

- ipotizzando per assurdo che il submit vada a buon fine, sarà mica che il mio insuccesso con questo metodo è collegato al fatto che non viene generata una nuova pagina (il link rimane invariato ma gli elementi compaiono sotto), e quindi il risultato c'è ma non lo vedo? Mi sembra strano, perché quando eseguo l'operazione manualmente, nel sorgente della pagina successivo alla ricerca, compaiono gli elementi html dei risultati.

Che mi sto perdendo? :confused:



--- Ultima modifica di biagiodistefano in data 2016-08-01 22:47:28 ---

--- Ultima modifica di biagiodistefano in data 2016-08-02 02:09:44 ---
(scusatemi ma sto avendo problemi con la formattazione del post e non riesco ad aggiustarlo, mi si scombina sempre!)
(scusatemi ma sto avendo problemi con la formattazione del post e non riesco ad aggiustarlo, mi si scombina sempre!)
Ciao caro, dovresti usare il pulsante su tutto il codice e risolvi/riduci i problemi di formattazione.

Premesso che non posso provare il tuo codice perché non ho un computer degno di questo nome davanti a me in questo momento (in tutti i casi avrei avuto una versione per 2.7), controlla che tipo di interazione hai col form, cioè se ottieni un vero e proprio invio del tuo form in HTML, a quel punto non ci sono problemi e puoi continuare con i tuoi tentativi.

Però se siamo difronte ad un form che scatena un evento in Javascript, la documentazione ci dice che: Mechanize doesn't evaluate javascript. In questo caso devi valutare delle alternative come Selenium, che però non ho mai usato e non posso esserti d'aiuto.

Ciao.
Daniele


Pagina: 1



Esegui il login per scrivere una risposta.