2010-04-13 4 views
0

Je travaille sur une application de grattage, je voulais essayer de le faire fonctionner mais j'ai rencontré un problème. J'ai remplacé la destination originale de raclage dans le code ci-dessous avec la page Web de googles, juste pour le test. Il semble que mon téléchargement n'a pas tout, je note que le corps et les balises html manquent leurs balises proches. Comment puis-je l'obtenir pour tout télécharger? Quel est le problème avec mon exemple de code:C# WebClient télécharge seulement html partiel

string filename = "test.html"; 

WebClient client = new WebClient();    
string searchTerm = HttpUtility.UrlEncode(textBox2.Text);    
client.QueryString.Add("q", searchTerm); 
client.QueryString.Add("hl", "en"); 
string data = client.DownloadString("http://www.google.com/search"); 

StreamWriter writer = new StreamWriter(filename, false, Encoding.Unicode); 
writer.Write(data); 
writer.Flush(); 
writer.Close(); 

Répondre

4

pages web de Google sont maintenant en HTML 5, ce qui signifie les balises BODY et HTML peuvent être fermés soi - ce qui est la raison pour laquelle Google les omet (croyez-le ou non, il leur permet d'économiser la bande passante.)

See this article. Vous pouvez écrire HTML5 en mode "HTML/SGML" (ce qui permet d'omettre les balises de fermeture comme HTML avant XHTML) ou en "XHTML" qui suit les règles de XML, nécessitant la fermeture de toutes les balises.

le navigateur qui choisit d'analyser la page dépend si vous envoyez un en-tête Content-type de text/html pour la syntaxe HTML/SGML ou application/xhtml+xml pour la syntaxe XHTML. (Source: HTML5 syntax - HTML vs XHTML)

0

... La page de Google n'a pas les balises de fermeture pour <body> et <html>. Parler de l'optimisation folle ...

0

http://www.google.com/search n'a pas d'étiquette de fermeture.

+0

@walther: L'OP se plaignait que les étiquettes fermées n'étaient pas téléchargées. J'ai expliqué qu'ils ne sont pas là pour être téléchargés. Comment n'est-ce pas une réponse? –

+0

Eh bien, c'est le même genre de réponse que lorsque vous avez une question "comment puis-je sélectionner un élément dans GridView?" et vous répondez par "oui, vous pouvez!". Vous énoncez l'évidence ici sans autre explication sur ce qui se passe. C'est pourquoi je ne trouve pas votre message très utile. C'est tout ;-) Rien de personnel. – walther

+0

@walther: Pas d'inquiétude, je ne reçois pas de critiques personnellement; Je ne suis tout simplement pas d'accord avec votre évaluation. Votre analogie ne convient pas, car l'absence de balises de fermeture n'était pas du tout évidente pour l'OP, qui pensait que leur code les lâchait d'une manière ou d'une autre. Si le PO avait demandé pourquoi Google a omis les tags, votre critique aurait été fondée (mais je n'aurais pas répondu de cette façon pour commencer). –

Questions connexes