Existe algo de errado com este código de consumo de url de mecanismo do Google App que eu tenho aqui?
-
19-09-2019 - |
Pergunta
Quando vejo a fonte da página no meu navegador (Firefox) (View-> Page Source), copie-a e cole-a no meu editor HTML, vejo quase a mesma página (neste exemplo, é www.google.com) como aparece no meu navegador. Mas quando eu recebo a fonte HTML através deste código (através do Googles App Motores)
from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
if result.status_code == 200:
print result.content
Copie -o e cole -o no meu editor HTML, a página parece bem diferente. Por que é tão? Há algo errado com o código?
++++++++++++++++++++++++++++++
Acompanhamento:
Nesse momento (domingo, 13 de dezembro de 2009, 13:01, GMT, para ser preciso), recebi duas perguntas de comentários (de Aaron e Christian P.) e uma resposta de Alex Martelli.
Ambos Aaron e Christian P. estão perguntando sobre o que realmente é diferente entre a fonte obtida pelo Fire-Fox e a fonte obteve o Google-App-Engine quando ambos são exibidos pelo mesmo editor HTML.
Aqui eu carreguei capturas de tela também:
Um mostra a fonte obtenha de fogo-fox
E o outro mostra a fonte obteve a motor do Google-Appin
Quando ambos são exibidos através do editor "MS Front Page".
Uma diferença, que é bastante óbvia, é uma codificação diferente: no código Fire-Fox, tudo é exibido em inglês, enquanto no código do motor do Google-App eu recebo vários símbolos.
Outra diferença são algumas linhas adicionais na parte superior da página no código do mecanismo do Google App. Eu acho, é isso que Alex Martelli estava falando sobre sua resposta ("... a abordagem de busca e impressão terá metadados em torno dela também ...").
Mais uma pequena diferença é que a caixa para a imagem do Google é dividida em várias caixas em um código, enquanto ela permanece inteira no outro.
Alex Martelli sugeriu que eu usasse este código (se eu o entendesse corretamente):
from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
if result.status_code == 200:
print "content-type: text/plain"
print
Eu tentei, mas, neste caso, nada é exibido.
Obrigado a todos por suas respostas e, por favor, continue respondendo - eu realmente quero ver esse problema finalmente resolvido.
++++++++++++++++++++++++++++++
Acompanhamento:
Ok, o problema foi resolvido.
Eu não prestei toda a minha atenção para Alex MartelliAs instruções e, portanto, criaram um código errado. Aqui está ele certo:
from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
if result.status_code == 200:
print "content-type: text/plain"
print
print result.content
Este código exibe exatamente o que é necessário - nenhuma linha adicional na parte superior da página.
Bem, ainda recebo os símbolos estranhos, mas descobri que provavelmente é o problema do Google. O problema é que estou atualmente em Taiwan, e o Google parece estar ciente disso e muda automaticamente de www.google.com (que é em inglês) para www.google.com.tw (que está em chinês), mas este Eu acho que já é outro tópico.
Obrigado a todos que responderam aqui.
Solução
Você não emitiu explicitamente um cabeçalho de "tipo de conteúdo" e uma linha vazia no final dos cabeçalhos, para que as primeiras linhas provavelmente sejam perdidas; tente adicionar antes do final print
algo como
print "content-type: text/plain"
print
Além disso, o que você está recebendo em ambos os casos é essencialmente um grande <script>
Com um pouco de HTML extra ao seu redor-isso é tudo o que o Firefox lhe dará na página "View Source", enquanto a abordagem de busca e impressão terá metadados também, por exemplo, o "Doctype" (Dependendo do editor HTML que você está segmentando, isso pode ou não ser um problema).