k33theod Δημοσ. 29 Μαρτίου 2016 Δημοσ. 29 Μαρτίου 2016 (επεξεργασμένο) # Ένα ακόμη τutorial/παράδειγμα για την χρήση της urllib.request # Προσοχή διότι ορισμένα url απαγορεύουν σε προγράμματα # να διαβάζουν τα περιεχόμενά τους # Ένα από αυτά είναι το facebook (δεν μπορείς να δείς πληροφορίες # χωρίς να συνδεθείς και εάν συνδεθείς σου κλείνουν το account) # Αυτό το πρόγραμμα ανοίγει το url του insomnia στις σελίδες πληροφοριών # 3 χρηστών του M2000, του groot και kercyn, η επιλογή έγινε τυχαία # και με ενημερώνει εάν είναι online ή Απενεργοποιημένοι # Βρίσκω τις σελίδες των τριών χρηστών από όπου μπορώ να πάρω την πληροφορία # http://www.insomnia.gr/user/370421-m2000/ # http://www.insomnia.gr/user/350518-groot/ # http://www.insomnia.gr/user/284325-kercyn/ # Ξεκινάω να γράφω κώδικά # Εισάγω τις βιβλιοθήκες import urllib.request as rq from tkinter import * #Δημιουργώ τρία text για να πάρουν την πληροφορία online ή Απενεργοποιημένος. text1 = '' text2 = '' text3 = '' # χρησιμοποιώ τη μέθοδο .Request με παράμετρο την headers=... για να ανοίξω τη # σελίδα που έχει την πληροφορία για το χρήστη M2000 rec=rq.Request('http://www.insomnia.gr/user/370421-m2000/', headers={'User-Agent': 'Mozilla/5.0'}) # και μετά ανοίγω το url data=rq.urlopen(rec) # τα δεδομένα έρχονται σε δυαδική μορφή και πολλά είναι κωδικοποιήμενα πχ # \xce\x91\xcf\x80\xce\xb5\xce\xbd\xce\xb5\xcf\x81\xce\xb3\xce\xbf\xcf\x80\xce\xbf # αφού τα διαβάσουμε binary_file=data.read() # τα αποκοδικοποιούμε binary_decoded=binary_file.decode('utf8') # τέλος τα κάνουμε string str_decoded=str(binary_decoded) # Χρησιμοποιούμε τη μέθοδο .find για να βρούμε άν ο M2000 είναι Online # Η εντολή επιστρέφει τη θέση της τιμής της πχ >>>58268 ή >>>-1 εάν δεν βρεί κάτι. M2000=str_decoded.find('Online') if M2000 == -1: text1='M2000: Απενεργοποιημένος' else: text1='M2000: Online' #Κλείνουμε το αρχείο data.close() #Κάνω τα ίδια για το χρήστη groot rec2=rq.Request('http://www.insomnia.gr/user/350518-groot/', headers={'User-Agent': 'Mozilla/5.0'}) data2=rq.urlopen(rec2) binary_file2=data2.read() binary_decoded2=binary_file2.decode('utf8') str_decoded2=str(binary_decoded2) groot=str_decoded2.find('Online') if groot == -1: text2='groot: Απενεργοποιημένος' else: text2='groot: Online' data2.close() #και τα ίδια για το χρήστη Kercyn rec3=rq.Request('http://www.insomnia.gr/user/284325-kercyn/', headers={'User-Agent': 'Mozilla/5.0'} ) data3=rq.urlopen(rec3) binary_file3=data3.read() binary_decoded3=binary_file3.decode('utf8') str_decoded3=str(binary_decoded3) kercyn=str_decoded3.find('Online') if kercyn == -1: text3='kercyn: Απενεργοποιημένος' else: text3='kercyn: Online' data3.close() #Δημιουργώ ένα παράθυρο για να γράψω τα στοιχεία που έχω win=Tk() win.geometry('250x100') win.title('Online στο insomnia') #Δημιουργώ τις τρείς ταμπέλες για τους τρεις χρήστες #και τις βάζω στο παράθυρο label1=Label(win, text=text1, font=('times', 14), anchor=W, relief=RIDGE ) label1.grid(sticky=NSEW) label2=Label(win, text=text2, font=('times', 14), anchor=W, relief=RIDGE) label2.grid(sticky=NSEW) label3=Label(win, text=text3, font=('times', 14), anchor=W, relief=RIDGE) label3.grid(sticky=NSEW) #Τρέχω το παράθυρο win.mainloop() # Αποθηκεύω το αρχείο με κατάληξη κατά προτίμηση .pyw και το εκτελώ με διπλό κλικ Επεξ/σία 30 Μαρτίου 2016 από k33theod
M2000 Δημοσ. 29 Μαρτίου 2016 Δημοσ. 29 Μαρτίου 2016 SyntaxError: Non-ASCII character '\xce' in file check.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details το έσωσα utf-8 (το τρέχω σε Linux) το διόρθωσα με το # This Python file uses the following encoding: utf-8 αλλά έχω πρόβλημα με τα κενά!!!!! στο gedit Έφτιαξα χειροκίνητα τα διαστήματα στα if / else Πήρα αυτό! Traceback (most recent call last): File "check.py", line 21, in <module> import urllib.request as rqImportError: No module named request μάλλον δεν υπάρχει το Module.. η φόρμα με το κώδικα βάζει διαστήματα...δεν κάνει για python!!!!!!!
k33theod Δημοσ. 29 Μαρτίου 2016 Μέλος Δημοσ. 29 Μαρτίου 2016 SyntaxError: Non-ASCII character '\xce' in file check.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details το έσωσα utf-8 (το τρέχω σε Linux) Σε linux νομίζω πρέπει να βάλεις πάνω δύο γραμμές #!/usr/local/bin/python όπου έχεις την python και #-*- coding:utf-8 -*- Εναλλακτικά μπορείς να σβήσεις όλα τα σχόλια #...
M2000 Δημοσ. 29 Μαρτίου 2016 Δημοσ. 29 Μαρτίου 2016 Εντάξει εκεί το ξεπέρασα...αλλά κολλάει παρακάτω..μάλλον δεν υπάρχει το Module. Ok. τρέχει απ'ευθείας σε 2.6 ενώ πρέπει να τρέξει σε 3 με python3 check.py αλλά πήρα αυτό! File "check.py", line 22, in <module> from tkinter import * File "/usr/lib/python3.4/tkinter/__init__.py", line 41, in <module> raise ImportError(str(msg) + ', please install the python3-tk package')ImportError: No module named '_tkinter', please install the python3-tk package ok! Δούλεψε, αλλά δεν με δείχνει ενεργοποιημένο!
k33theod Δημοσ. 29 Μαρτίου 2016 Μέλος Δημοσ. 29 Μαρτίου 2016 Εντάξει εκεί το ξεπέρασα...αλλά κολλάει παρακάτω..μάλλον δεν υπάρχει το Module. Ok. τρέχει απ'ευθείας σε 2.6 ενώ πρέπει να τρέξει σε 3 με python3 check.py αλλά πήρα αυτό! File "check.py", line 22, in <module> from tkinter import * File "/usr/lib/python3.4/tkinter/__init__.py", line 41, in <module> raise ImportError(str(msg) + ', please install the python3-tk package') ImportError: No module named '_tkinter', please install the python3-tk package ok! Δούλεψε, αλλά δεν με δείχνει ενεργοποιημένο! Screenshot - 29032016 - 11:32:46 μμ.png Ναι όταν το τρέχουμε για τον εαυτό μας υπάρχει ένα μικρό πρόβλημα Το παράξενο είναι αν πας στο profil σου στο insomnia και κάνεις refresh θα δείς ότι είσαι απενεργοποιήμενος και αν ξανακάνεις θα είσαι ενεργοποιήμενος. Αυτό το κάνει στη δεύτερη εντολή (urlopen) (μόνο για τον εαυτό μας) και δεν ξέρω γιατί. Εγώ που το τρέχω σε δείχνει Online
gon1332 Δημοσ. 11 Απριλίου 2016 Δημοσ. 11 Απριλίου 2016 Καλησπέρα παιδιά, πριν κάποιους μήνες προσπάθησα να παίξω με web scraping με μία χαζή εφαρμογούλα. Είχα κολλήσει και το παράτησα λόγω περιορισμένου χρόνου (πρώτη φορά τότε με web scraping). Χθες βρήκα ένα ωραίο βιβλιαράκι και ξεκίνησα με το θέμα ώστε να το τελειώσω. Πιστεύω θα μου δώσει τις βάσεις για πιο προχωρημένα θέματα όπως το authentication. Συγκεκριμένα το βιβλίο χρησιμοποιεί python 3 με urllib και BeautifulSoup. Πολύ δυνατή η τελευταία. Ρίξτε του μία ματιά. Ορίστε ένα απλό παράδειγμα με τα εργαλεία που ανέφερα. Κοιτάξτε πόσο απλά η ΒeautifulSoup "ξεριζώνει" το <h1>. #!/usr/bin/env python3 # encoding: utf-8 from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getTitle(url): try: html = urlopen(url) except HTTPError as e: return None try: bsObj = BeautifulSoup(html.read(), "lxml") title = bsObj.body.h1 except AttributeError as e: return None return title title = getTitle("http://pythonscraping.com/pages/page1.html") if title is None: print("Title could not be found") else: print(title) και η εκτέλεση: ➜ Chapter1 ./scrapetest.py <h1>An Interesting Title</h1>
k33theod Δημοσ. 11 Απριλίου 2016 Μέλος Δημοσ. 11 Απριλίου 2016 Έχω ακούσει και εγώ καλά λόγια για το beautifulsoup. Όταν όμως θες να βρεις κάτι μη τυποποιημένο (που δεν έχει σχέση με κάποιο tag html) δεν βοηθάει και χρειάζεται να μάθει κάποιος regular expressions. Το σκέτο urlopen στις περισσότερες περιπτώσεις δεν θα δουλεύει και θα τρως πόρτα από τους servers. Ανοίγουν πιο σίγουρα με τον συνδυασμό των γραμμών 30 και 33 του tutorial 1
pmav99 Δημοσ. 11 Απριλίου 2016 Δημοσ. 11 Απριλίου 2016 @gon1332 Για arbitrary pages καλό είναι το beautifulsoup αλλά αν θες να κάνεις scrape ένα ολόκληρο site το scrapy είναι συνήθως καλύτερη επιλογή, έχει όμως πιο απότομο learning curve. That being said, όλες οι παρεμφερείς βιβλιοθήκες έχουν θέμα με τη Javascript (AJAX κτλ). Στις περιπτώσεις αυτές, αν δεν σε απασχολεί και ιδιαίτερα το performance, τότε selenium 1
gon1332 Δημοσ. 11 Απριλίου 2016 Δημοσ. 11 Απριλίου 2016 Χμμ. Κατάλαβα τι λέτε. Νομίζω για αυτό που προσπάθησα να κάνω για το Insomnia είναι απλό. Το έχω ήδη κάνει, απλά δε μπόρεσα να περάσω το authentication, αυτό που είπα ο parsifal. Το BS διάβασα είναι καλό και για Javascript και CSS. Το selenium το είχε προτείνει και ο nilosgr στο άλλο post, αλλά ακόμη λέω να μην το αγγίξω. Θα τελειώσω το βιβλίο και θα αρχίσω να ψάχνομαι παραπέρα μετά. Ευκαιρίες ψάχνω να ξεφεύγω από τη μεταπτυχιακή Πάντως το βιβλιαράκι φαίνεται τίμιο. Εισάγει ακόμη και μεθόδους scraping με αναγνώριση κειμένου από εικόνες με tesseract! Την είχα χρησιμοποιήσει για LPR για ένα project. Δε μπορούσα να φανταστώ χρήση της για scraping.
k33theod Δημοσ. 11 Απριλίου 2016 Μέλος Δημοσ. 11 Απριλίου 2016 Προσπαθώ και γω τώρα να αγοράσω το βιβλίο από το θείο αλλά μου το δίνει σε μια μορφή .net_rar και προπαθώ να το ανοίξω
pmav99 Δημοσ. 11 Απριλίου 2016 Δημοσ. 11 Απριλίου 2016 Το BS διάβασα είναι καλό και για Javascript και CSS. link?
gon1332 Δημοσ. 11 Απριλίου 2016 Δημοσ. 11 Απριλίου 2016 link? Το διάβασα στο βιβλίο να το λέει. Ακόμη δεν έχω φτάσει σε προχωρημένα θέματα. UPDATE: Τελικά λέει σίγουρα για CSS. Για Javascript έκανε μία αναφορά αυτός, αλλά δεν είναι ξεκάθαρο με ποιο εργαλείο.
pmav99 Δημοσ. 12 Απριλίου 2016 Δημοσ. 12 Απριλίου 2016 CSS selectors υποστηρίζουν πρακτικά όλες οι αντίστοιχες βιβλιοθήκες (τουλάχιστον εγώ δεν ξέρω καμία που να μην υποστηρίζει). Το να υποστηρίζουν Javascript όμως είναι κάτι διαφορετικό. Μην ξεχνάς ότι HTML source != DOM regexes κτλ κάνουν parse το HTML source. Αν όμως το περιεχόμενο της ιστοσελίδας παράγεται δυναμικά στον client τότε δεν δουλεύουν. 1
alou Δημοσ. 12 Απριλίου 2016 Δημοσ. 12 Απριλίου 2016 Για js generated pages Νode + phantomJS (είδα ότι υπάρχουν και λύσεις σε python μια και από εκεί ξεκίνησε το θέμα αν και σέρνεται από ότι λένε). Η λογική υπάρχει για λόγους SEO & testing αλλά δεν έχει σημασία. Για scraping από node, έχω χρησιμοποιήσει το x-ray παίζοντας και είχα δει ότι υπάρχει και κάποιο phantom driver που λογικά θα κάνει σχετικά εύκολη τη διαδικασία, κάποια στιγμή είχα κάνει κάτι αλλά δεν το βρίσκω τώρα, αν ενδιαφέρει ευχαρίστως το ψάχνω παραπάνω.
pmav99 Δημοσ. 12 Απριλίου 2016 Δημοσ. 12 Απριλίου 2016 αν και σέρνεται από ότι λένε Scraping και ταχύτητα εκτέλεσης στην ίδια πρόταση. Hmm...
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα