eigenfisting

Per parlare di università, politica, attualità e .. dai non diciam cazzate, solo fisting e foto del giusto che dorme..
 
HomeCalendarFAQSearchMemberlistUsergroupsRegisterLog in

Request response

View previous topic View next topic Go down
Author Message
Okram_87




Age : Join date : 2008-11-27 Posts : 101 Location :

PostSubject: Request response Sun Dec 06, 2009 10:50 pm

io non ho fatto protocolli quidi sono a 0 in questo argomento...magari capone ve l'ha spiegato...
la domanda è:

da quanto ho capito facendo reverse engineering da un crawler python, quando faccio una richiesta HTTP viene ritornata una request response composta, tra le altre cose, da un body....
è possibile analizzare questo body per salvare, ad esempio, solo le immagini in esso contenute?
Back to top Go down
View user profile
seitan666

avatar


Age : Join date : 2008-11-26 Posts : 203 Location :

PostSubject: Re: Request response Mon Dec 07, 2009 3:02 pm

Beh... devi fare crawling http?
in sostanza devi emulare un browser: fai una richiesta HTTP, ti torna un intestazione ed un file (tipicamente un file html)
Se ti interessano solo le immagini dovresti cercare all'interno del file html tutti i tag <img>, ma se le vuoi proprio tutte dovresti anche cercare nei file CSS e JavaScript, e potrebbe diventare abbastanza lungo e complicato...
Una volta trovati gli indirizzi alle immagini, fai un'altra richiesta per ogni immagine che ti serve.. e ti torna il file con l'immagine..
Back to top Go down
View user profile
PsycoYack

avatar


Age : Join date : 2008-11-26 Posts : 267 Location :

PostSubject: Re: Request response Mon Dec 07, 2009 3:39 pm

io ti consiglierei di cercare solo le immagini esplicite in img, perchè quelle css sono ancora fattibili, ma per javascript praticamente dovresti avere un interprete javascript per cagarle fuori...
comunque le espressioni regolari rullano, fai una ricerca su tutto il testo di "<img.+?src=([\"']([^\"']+)[\"']|([^\s]+))" (case insensitive ovviamente, in realtà funziona solo se le espressioni regolari sono compatibili perl e +? disabilita il greedy matching, quelle python lo sono per la cronaca) e poi ti prendi $2 o $3, a seconda di quale dei due sia non null.
Back to top Go down
View user profile
seitan666

avatar


Age : Join date : 2008-11-26 Posts : 203 Location :

PostSubject: Re: Request response Mon Dec 07, 2009 9:28 pm

ah.. per alcuni siti non basta fare la richiesta dell'immagine, ma devi anche avere cookies e/o http-referer per cui anche in questo caso è fattibile ma si complica un po'.. oltre allo user-agent.. che se riesci ti conviene modificare in un browser conosciuto.. tipo così: "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" o così "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)".. ma sono solo esempi..
Concordo col mio predecessore sia sull'uso delle regex che sull'evitare (se puoi) di analizzare il JS...
Back to top Go down
View user profile
Okram_87




Age : Join date : 2008-11-27 Posts : 101 Location :

PostSubject: Re: Request response Mon Dec 07, 2009 10:56 pm

si si è possibilissimo evitare il JS...infatti mi basta analizzare un semplice html...
infatti il problema credo sia proprio riferito allo user-agent...il crawler viene visto come robot e quindi salva solo una pagina di errore che dice che il browser utilizzato non è stato riconosciuto...

Code:

<meta name="robots" content="noodp,noydir" />
<meta name="description" content=" F******k is a social utility that connects people with friends and others who work, study and live around them. People use F******K to keep up with friends, upload an unlimited number of photos, post links and videos, and learn more about the people they meet." />
<title>Incompatible Browser | F******k</title>
e dopo prosegue con il body della pagina d'errore invece di quella che il crawler richiede
Back to top Go down
View user profile
seitan666

avatar


Age : Join date : 2008-11-26 Posts : 203 Location :

PostSubject: Re: Request response Tue Dec 08, 2009 5:40 pm

eccoti uno snippet scritto al momento:
Code:
import urllib2,re,cookielib

url = "http://www.explosm.net/comics/1881/"
proxy = None
#proxy = {'http': 'http://proxy.example.com:8080/'}
def getAllImages(url,proxy):
   if not url.lower().startswith("http://"):
      url = "http://%s" % url
   req1 = urllib2.Request(url)
   req1.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)")
   cj = cookielib.LWPCookieJar()
   if proxy:
      opener = urllib2.build_opener(urllib2.ProxyHandler(proxy),urllib2.HTTPCookieProcessor(cj))
   else:
      opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
   try:
      html=opener.open(req1).read()
   except:
      return None #Timeout o altri errori
   imgs = re.findall(r"<img[^>]*?src=([\"']([^\"']+)[\"']|([^\s]+))",html,re.DOTALL | re.IGNORECASE)
   i = 0
   for img in imgs:
      img = img[1] if img[1] else img[2]
      if img.startswith("/"):
         url = "http://%s%s" % (req1.get_host(),img)
      elif img.lower().startswith("http://"):
         url = img
      elif img.lower().startswith(req1.get_host().lower()+"/"):
         url = "http://%s" % img
      else:
         url = req1.get_full_url()
         if url.rindex('/') != 5:
            url = url[:url.rindex('/')+1]
         url = "%s%s" % (url,img)
      req = urllib2.Request(url)
      req.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)")
      req.add_header("Referer",req1.get_full_url())
      try:
         open("immagine%d" % i,"w").write(opener.open(req).read())
         print "Download di '%s' => '%s'" % (img,url)
         i += 1
      except:
         print "Fallito download di '%s' => '%s'" % (img,url)

getAllImages(url,proxy)
Back to top Go down
View user profile
Okram_87




Age : Join date : 2008-11-27 Posts : 101 Location :

PostSubject: Re: Request response Tue Dec 08, 2009 10:36 pm

ma grazie! non dovevi scomodarti così tanto!!
Back to top Go down
View user profile
Sponsored content





PostSubject: Re: Request response

Back to top Go down

Request response

View previous topic View next topic Back to top
Page 1 of 1

Permissions in this forum: You cannot reply to topics in this forum
eigenfisting :: VARIE :: PROGRAMMAZIONE -
Forum create on Forumotion | © phpBB | Free forum support | Contact | Report an abuse | Forumotion.com