2009-10-23 10 views
2

J'essaye de faire un webscrape un site Web et il semble me nourrir HTML bidon avec la méthode WebClient.DownloadData().Comment simuler un navigateur Web afin que le site Web me renvoie la bonne source HTML?

Y at-il un moyen pour moi de "tromper" le site Web que je suis un navigateur de toutes sortes?

Edit:

L'ajout de cette tête ne résout toujours pas le problème:

Client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

Y at-il autre chose que je peux essayer? :)

Edit 2:

Si elle aide à tous. J'essaie de télécharger la source d'une recherche ThePirateBay.

Cette URL: http://thepiratebay.org/search/documentary/0/7/200

Comme vous pouvez le voir, la source montre ce qui est devrait, information sur les semences pour les films, etc. Mais quand j'utilise la méthode DownloadData(), je reçois des résultats torrent au hasard, rien à tous liés à ce que je recherche.

+0

Fonctionne pour moi, même sans changer d'en-tête. –

Répondre

0
WebClient client = new WebClient(); 
client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
+0

J'ai ajouté ces entêtes que vous avez dites et ça me nourrit toujours ce que HTML veut. Complet sans rapport avec ma recherche. Je télécharge le code HTML d'une URL, je formate donc une URL de recherche puis télécharge le code source html. Que puis-je faire à propos de ce problème! :( –

+0

On dirait que votre problème est en fait lié aux cookies, vous êtes probablement redirigé et votre script ne fournit pas les clés nécessaires à la maintenance de votre session.Il y a aussi du javascript impliqué dans le tri ou vous n'avez pas les URL correctes encodé vos paramètres Si vous voulez continuer plus loin, il peut être utile de poser une nouvelle question puisque celle-ci, comme elle a été formulée, a reçu une réponse – SpliFF

4

Essayez d'ajouter un en-tête de l'agent utilisateur il pense que vous êtes l'un des principaux navigateurs (IE, FF, etc)

client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
0

Essayez d'imprimer les en-têtes du WebClient - il y a peut-être quelque chose d'étrange dans là par défaut qui pourrait être le site de ne pas être un navigateur?

3

Peut-être que je manque quelque chose, mais le code ci-dessous couru sans problème:

Regex torrents = new Regex(
    @"<tr>[\s\S]*?<td><a href=""(?<link>.*?)"".*?>" + 
    @"(?<name>.*?)</a>[\s\S]*?<td><a href=""(?<torrent>.*?)""[\s\S]*?>" + 
    @"(?<size>\d+\.?\d*)&nbsp;(?<unit>.)iB</td>"); 
Uri url = new Uri("http://thepiratebay.org/search/documentary/0/7/200"); 

WebClient client = new WebClient(); 
string html = client.DownloadString(url); 
//string html = Encoding.Default.GetString(client.DownloadData(url)); 

foreach (Match torrent in torrents.Matches(html)) 
{ 
    Console.WriteLine("{0} ({1:0.00}{2}b)", 
     torrent.Groups["name"].Value, 
     Double.Parse(torrent.Groups["size"].Value), 
     torrent.Groups["unit"].Value); 
    Console.WriteLine("\t{0}", 
     new Uri(url, torrent.Groups["link"].Value).LocalPath); 
    Console.WriteLine("\t{0}", 
     new Uri(torrent.Groups["torrent"].Value).LocalPath); 
} 
+0

Oui, erreur de test –

+0

@Henk, quel est le problème? –

+0

"erreur de test" signifie que l'erreur dans la question n'a pas pu être reproduite. –

0

HTTP est un protocole textuel qui est très lisible par l'homme! Connectez-vous au site en utilisant telnet et tapez manuellement les requêtes HTTP. Cela vous permet un contrôle total sur la chaîne de l'agent utilisateur et d'autres informations associées. C'est aussi simple mort. Lorsque vous avez ce travail à la main, vous devriez être en mesure d'ajouter cette fonctionnalité à votre application avec une programmation socket très basique.

Plus: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Je posterai des liens vers la RFC et la page de Wikipédia sur la chaîne de l'agent utilisateur, mais je viens de rejoindre.

Questions connexes