Ir para conteúdo
Entre para seguir isso  
hexodin

Dúvidas sobre o código-fonte.

Recommended Posts

Olá Fabrício, eu estou aprendendo Django, estou no capítulo sobre os forms do livro da Appress, estava pensando em fazer um Cross-site, como o myps3t, mas não sobre troféus e sim para pegar dados automáticamente de um site e fazer alguma iterações matemáticas.

 

Não sou nenhum mestre do urllib2 que você utilizou juntamente com expressões regulares (re) para conseguir dados de vários sites com informações sobre usuários e troféus pela rede, como o ps3trophy e o playstation, mas me intrigou o porque você utilizou o método Request ao invés de urlopen, qual a diferença? O request ser aberto pelo opener é mais rápida a procura e iteração com os dados?

 

-- EDIT --

Bom, editando... acho que entendi porque você usou request, pois com um objeto destes, é possível trabalhar com os headers do site e outros métodos, também entendi que você cria uma lista com os dados da página para poder fazer uma iteração sobre ela com o loop, após essa análise, consegui criar um pequeno script que extrai dados do ps3trophycard.com:

 

# -*- coding: iso-8859-1 -*-

import urllib2, re

class PS3Trophy():
   def __init__(self, squidPass = dict()):
       proxySup = urllib2.ProxyHandler(squidPass)
       self.opener = urllib2.build_opener(proxySup,urllib2.HTTPHandler, urllib2.HTTPSHandler)
       urllib2.install_opener(self.opener)

       self.mainURL = "http://ps3trophycard.com/"

   def getUserInfo(self, user):
       userInfoRE = re.compile(r'
(?P[0-9,]+)')
       
       page = urllib2.Request(self.mainURL + "/profile/%s" % user)
       page.add_header('Accept-Charset', 'utf-8')
       pageData = self.opener.open(page).read().split("\n")
       col = []
       for i in pageData:
           data = userInfoRE.search(i)
           if data != None:
               col.append(data.group('number'))
   
       print """%s é nível %s e tem:
%s troféus de platina;
%s troféus de ouro;
%s troféus de prata;
%s troféus de bronze.
Num total de %s troféus!""" % (user, col[0], col[1], col[2], col[3], col[4], col[5])
      
if __name__ == "__main__":
   trophy = PS3Trophy({"http":"http://:@:})
   trophy.getUserInfo("fabriciols")

 

A saída:

fabriciols é nível 12 e tem:
7 troféus de platina;
49 troféus de ouro;
159 troféus de prata;
625 troféus de bronze.
Num total de 840 troféus!

 

O proxy é porque eu estou no trabalho e tenho que fazer a autenticação no proxy squid antes de poder coletar dados da internet, mas isso é desnecessário em uma conexão doméstica.

Compartilhe esta postagem


Link to post
Share on other sites
Olá Fabrício, eu estou aprendendo Django, estou no capítulo sobre os forms do livro da Appress, estava pensando em fazer um Cross-site, como o myps3t, mas não sobre troféus e sim para pegar dados automáticamente de um site e fazer alguma iterações matemáticas.

 

Não sou nenhum mestre do urllib2 que você utilizou juntamente com expressões regulares (re) para conseguir dados de vários sites com informações sobre usuários e troféus pela rede, como o ps3trophy e o playstation, mas me intrigou o porque você utilizou o método Request ao invés de urlopen, qual a diferença? O request ser aberto pelo opener é mais rápida a procura e iteração com os dados?

 

na verdade, eu tenho uma máscara para esta função que faz a conversão dos resultados para utf-8 e tem alguns outros controles.

Esta máscara usa a função "open" de um "Opener" que eu criei anteriormente.

Eu preciso deste opener pq manipulo os headers http e cookies !

 

Não sei se isso é possível fazer direto com o urlopen, as vezes até dá ... :D :bunda: :bunda: :bunda: :bunda:

Compartilhe esta postagem


Link to post
Share on other sites

Atualizei minha postagem, eu reparei que antes de puxar você adiciona ao header a aceitação de utf-8 e vi que isso só dá pra fazer com um request.

Compartilhe esta postagem


Link to post
Share on other sites

Crie uma conta ou entre para comentar

Você precisa ser um membro para fazer um comentário.

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...