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

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

Δημοσ. (επεξεργασμένο)


# Ένα ακόμη τ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 και το εκτελώ με διπλό κλικ

 

Επεξ/σία από k33theod
Δημοσ.

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 rq
ImportError: No module named request
 


μάλλον δεν υπάρχει το Module..


η φόρμα με το κώδικα βάζει διαστήματα...δεν κάνει για python!!!!!!!

Δημοσ.

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 -*-

Εναλλακτικά μπορείς να σβήσεις όλα τα σχόλια #...

Δημοσ.

Εντάξει εκεί το ξεπέρασα...αλλά κολλάει παρακάτω..μάλλον δεν υπάρχει το 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!

Δούλεψε, αλλά δεν με δείχνει ενεργοποιημένο!

post-370421-0-51984300-1459283608_thumb.png

Δημοσ.

Εντάξει εκεί το ξεπέρασα...αλλά κολλάει παρακάτω..μάλλον δεν υπάρχει το 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!

Δούλεψε, αλλά δεν με δείχνει ενεργοποιημένο!

attachicon.gifScreenshot - 29032016 - 11:32:46 μμ.png

Ναι όταν το τρέχουμε για τον εαυτό μας υπάρχει ένα μικρό πρόβλημα Το παράξενο είναι αν πας στο profil σου στο insomnia και κάνεις refresh θα δείς ότι είσαι απενεργοποιήμενος και αν ξανακάνεις θα είσαι ενεργοποιήμενος. Αυτό το κάνει στη δεύτερη εντολή (urlopen) (μόνο για τον εαυτό μας) και δεν ξέρω γιατί. Εγώ που το τρέχω σε δείχνει Online

post-372633-0-49348100-1459284609_thumb.jpg

  • 2 εβδομάδες αργότερα...
Δημοσ.

Καλησπέρα παιδιά,

 

πριν κάποιους μήνες προσπάθησα να παίξω με 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>
Δημοσ.

Έχω ακούσει και εγώ καλά λόγια για το beautifulsoup. Όταν όμως θες να βρεις κάτι μη τυποποιημένο (που δεν έχει σχέση με κάποιο tag html) δεν βοηθάει και χρειάζεται να μάθει κάποιος regular expressions.

Το σκέτο urlopen στις περισσότερες περιπτώσεις δεν θα δουλεύει και θα τρως πόρτα από τους servers. Ανοίγουν πιο σίγουρα με τον συνδυασμό των γραμμών 30 και 33 του tutorial

  • Like 1
Δημοσ.

@gon1332

Για arbitrary pages καλό είναι το beautifulsoup αλλά αν θες να κάνεις scrape ένα ολόκληρο site το scrapy είναι συνήθως καλύτερη επιλογή, έχει όμως πιο απότομο learning curve. That being said, όλες οι παρεμφερείς βιβλιοθήκες έχουν θέμα με τη Javascript (AJAX κτλ). Στις περιπτώσεις αυτές, αν δεν σε απασχολεί και ιδιαίτερα το performance, τότε selenium

  • Like 1
Δημοσ.

Χμμ. Κατάλαβα τι λέτε.

Νομίζω για αυτό που προσπάθησα να κάνω για το Insomnia είναι απλό. Το έχω ήδη κάνει, απλά δε μπόρεσα να περάσω το authentication, αυτό που είπα ο parsifal.

Το BS διάβασα είναι καλό και για Javascript και CSS. Το selenium το είχε προτείνει και ο nilosgr στο άλλο post, αλλά ακόμη λέω να μην το αγγίξω.

Θα τελειώσω το βιβλίο και θα αρχίσω να ψάχνομαι παραπέρα μετά. Ευκαιρίες ψάχνω να ξεφεύγω από τη μεταπτυχιακή :D Πάντως το βιβλιαράκι φαίνεται τίμιο. Εισάγει ακόμη και μεθόδους scraping με αναγνώριση κειμένου από εικόνες με tesseract! Την είχα χρησιμοποιήσει για LPR για ένα project. Δε μπορούσα να φανταστώ χρήση της για scraping.

Δημοσ.

Προσπαθώ και γω τώρα να αγοράσω το βιβλίο από το θείο αλλά μου το δίνει σε μια μορφή .net_rar και προπαθώ να το ανοίξω

Δημοσ.

link?

Το διάβασα στο βιβλίο να το λέει. Ακόμη δεν έχω φτάσει σε προχωρημένα θέματα.

 

UPDATE: Τελικά λέει σίγουρα για CSS. Για Javascript έκανε μία αναφορά αυτός, αλλά δεν είναι ξεκάθαρο με ποιο εργαλείο.

Δημοσ.

CSS selectors υποστηρίζουν πρακτικά όλες οι αντίστοιχες βιβλιοθήκες (τουλάχιστον εγώ δεν ξέρω καμία που να μην υποστηρίζει).

 

Το να υποστηρίζουν Javascript όμως είναι κάτι διαφορετικό. Μην ξεχνάς ότι HTML source != DOM

 

regexes κτλ κάνουν parse το HTML source. Αν όμως το περιεχόμενο της ιστοσελίδας παράγεται δυναμικά στον client τότε δεν δουλεύουν.

  • Like 1
Δημοσ.

Για js generated pages Νode + phantomJS (είδα ότι υπάρχουν και λύσεις σε python μια και από εκεί ξεκίνησε το θέμα αν και σέρνεται από ότι λένε). Η λογική υπάρχει για λόγους SEO & testing αλλά δεν έχει σημασία.

 

Για scraping από node, έχω χρησιμοποιήσει το x-ray παίζοντας και είχα δει ότι υπάρχει και κάποιο phantom driver που λογικά θα κάνει σχετικά εύκολη τη διαδικασία, κάποια στιγμή είχα κάνει κάτι αλλά δεν το βρίσκω τώρα, αν ενδιαφέρει ευχαρίστως το ψάχνω παραπάνω.

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

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

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

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

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

Σύνδεση

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

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