k33theod Δημοσ. 11 Νοεμβρίου 2017 Δημοσ. 11 Νοεμβρίου 2017 Γειά σε όλους Προσπαθώ να πάρω κάποια δεδομένα από ένα 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 χωρίς να τα καθαρίσω Ξέρω ότι δεν ήμουν και πολύ σαφής
becoming_I Δημοσ. 11 Νοεμβρίου 2017 Δημοσ. 11 Νοεμβρίου 2017 δοκιμασες με τη βιβλιοθηκη beautifulsoup; 1
k33theod Δημοσ. 11 Νοεμβρίου 2017 Μέλος Δημοσ. 11 Νοεμβρίου 2017 Δοκίμασα, δεν την ξέρω πολύ καλά τη βιβλίοθηκη και όταν πάρω το script σαν object μου δίνει μόνο ένα child που είναι ότι κείμενο έχει μέσα το tag, νομίζω δεν πάει πιο μέσα
k33theod Δημοσ. 13 Νοεμβρίου 2017 Μέλος Δημοσ. 13 Νοεμβρίου 2017 Βρήκα μία λύση και τη γράφω εδώ μήπως κάποιος χρειαστεί κάτι παρόμοιο Τελικά η χρήση των 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) 1
k33theod Δημοσ. 14 Νοεμβρίου 2017 Μέλος Δημοσ. 14 Νοεμβρίου 2017 Στο ίδιο θέμα αν κάποιος ξέρει Θέλω να πάρω δεδομένα με 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
k33theod Δημοσ. 14 Νοεμβρίου 2017 Μέλος Δημοσ. 14 Νοεμβρίου 2017 Λύθηκε το πρόβλημα πέρασα τις παραμέτρους σαν str και όχι dict και δουλεύει
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα