Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σε όλους 

Προσπαθώ να πάρω κάποια δεδομένα από ένα site

πχ στη σελίδα 'https://www.spitogatos.gr/students/tei-kritis-shteia'θέλω να πάρω τα urls των αποτελεσμάτων των σπιτιών

αυτά είναι μέσα σε ένα script σε μια μεταβλητή 

var listingsResultsJsonEncoded = 
[{"type":"listing",
"image":"<img src=\"https:\/\/m2.spitogatos.gr\/121341910_300x220.jpg?v=20140916\"  
alt=\"6060643\"  class=\"infowindowImage\" \/>",
"lazyImage":"<img src=\"https:\/\/www.spitogatos.gr\/main\/phpthumb\/static\/house_300x220.jpg\" 
 alt=\"6060643 lz\"  class=\"lazyImage infowindowImage\"  
data-original=\"https:\/\/m2.spitogatos.gr\/121341910_300x220.jpg?v=20140916\" \/>",
"url":"https:\/\/www.spitogatos.gr\/\u03b5\u03bd\u03bf\u03b9\u03ba\u03af\u03b1\u03c3\u03b7_
\u0394\u03b9\u03b1\u03bc\u03ad\u03c1\u03b9\u03c3\u03bc\u03b1_\u03a7\u03b1\u03c1\u03b9\u03bb
\u03ac\u03bf\u03c5__\u0398\u03b5\u03c3\u03c3\u03b1\u03bb\u03bf\u03bd\u03af\u03ba\u03b7_-l6060643",
"description":"\u0394\u03b9\u03b1\u03bc\u03ad\u03c1\u03b9\u03c3\u03bc\u03b1 75 \u03c4.\u03bc.",
"price":"€350","listing_id":"6060643",
"area":"\u03a7\u03b1\u03c1\u03b9\u03bb\u03ac\u03bf\u03c5 - 
\u0398\u03b5\u03c3\u03c3\u03b1\u03bb\u03bf\u03bd\u03af\u03ba\u03b7 - 
\u039a\u03ad\u03bd\u03c4\u03c1\u03bf",
"latitude":"40.596607","longitude":"22.972216","geoHash":"sx0"}
,
{"type":"listing",.....}]	

και τραβάω τα url με regex 

 

Επειδή όμως η μεταβλητή είναι λίστα jsons σκέφτομαι μήπως είναι καλύτερα αν μπορώ να τα πάρω ως json ή με evaluation ως λίστα

 

και στις 2 όμως περιπτώσεις μου βγάζει λάθη στο json λάθος delimiter ή αν το καθαρίσω λίγο invalid escape και στο  eval invalid syntax

 

Τα λάθη φαντάζομαι οφείλονται στη δομή του json που έχει στοιχεία της μορφής "lazyImage":"<img src=\"https:\/\/www.spitogatos.gr\/main\/phpthumb\/static\/house_300x220.jpg\"

alt=\"6060643 lz\" class=\"lazyImage infowindowImage\"
data-original=\"https:\/\/m2.spitogatos.gr\/121341910_300x220.jpg?v=20140916\" \/>", που μια τιμή περικλείει ένα tag με αυθαίρετη χρήση quotes που για τη  javascript φαίνεται να είναι οκ για την python όμως όχι και στα ελληνικά.

 

Υπάρχει κάποιος τρόπος να τα πάρω τα δεδομένα σε python χωρίς να τα καθαρίσω 

Ξέρω ότι δεν ήμουν και πολύ σαφής  :-)

Δημοσ.

Δοκίμασα, δεν την ξέρω πολύ καλά τη βιβλίοθηκη και όταν πάρω το script σαν object μου δίνει μόνο ένα child που είναι ότι κείμενο έχει μέσα το tag, νομίζω δεν πάει πιο μέσα 

Δημοσ.

Βρήκα μία λύση και τη γράφω εδώ μήπως κάποιος χρειαστεί κάτι παρόμοιο

Τελικά η χρήση των quotes μέσα στη js μεταβλητή δεν είναι αυθαίρετη αλλά όπου χρειάζεται έχουν escapes

οπότε αφού πάρω την τιμή της μεταβλητής σε str με regex ή όπως αλλιώς θέλει ο καθένας

πρέπει να βγάλουμε κάποια escapes γιατί είναι πολλά  :-) με

data = json_var.encode('utf-8').decode('unicode-escape')

 

ολόκληρη η συνάρτησή μου.

def extract_urls_spitivn(url_sxolis):
    data =str(requests.get(url_sxolis).content)
    patt = r"var listingsResultsJsonEncoded ?= ?(\[[^]]+])"
    json_var = re.search(patt, data).group(1)
    json_var = json_var.encode('utf-8').decode('unicode-escape')
    return json.loads(json_var)
    
  • Like 1
Δημοσ.

Στο ίδιο θέμα αν κάποιος ξέρει

Θέλω να πάρω δεδομένα με python requests από το ίδιο site spitogatos

 

Αυτά σε επίπεδο browser έρχονται με ένα request POST όπως στις εικόνες

 

Βάζω όλα τα headers σε ένα dict το body σε άλλο dict

και στέλνω το request

 

requests.post(url(όπως εμφανίζεται στην εικόνα 1), headers=headers_dict, data=body_dict)

 

και παίρνω διάφορα ή response 400 ή κείμενο html αλλά όχι το response που θέλω όπως στην εικόνα 2

Χάνω κάτι, ξεχνάω κάτι έχω κάνει 100 προσπάθειες με μικροαλλαγές στα headers και data αλλά τίποτα

 

Πριν πάω σε selenium σκέφτηκα μήπως κάτι μου ξεφεύγει και γίνεται με requests 

post-372633-0-79708400-1510652467_thumb.jpg

post-372633-0-03241300-1510652477_thumb.jpg

post-372633-0-31050900-1510652493_thumb.jpg

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...