Html WebClient.DownloadString变得乱七八糟

Html WebClient.DownloadString变得乱七八糟,html,vb.net,web,encoding,webclient,Html,Vb.net,Web,Encoding,Webclient,我最近写了一个网络爬虫作为辅助项目,我构建它的方式是,它使用System.Net.WebClient的DownloadString函数来下载指定的地址html,然后执行一些字符串操作来提取html中包含的所有链接,然后在找到的所有链接上重复该过程(跳过已爬网的任何内容). 它适用于大多数地址,但当我以www.yahoo.com作为种子时,它会做一些非常奇怪的事情。它没有从DownloadString调用中返回html标记,而是返回了一堆胡言乱语 我对DownloadString函数的理解是,当

我最近写了一个网络爬虫作为辅助项目,我构建它的方式是,它使用
System.Net.WebClient
DownloadString
函数来下载指定的地址html,然后执行一些字符串操作来提取html中包含的所有链接,然后在找到的所有链接上重复该过程(跳过已爬网的任何内容).

它适用于大多数地址,但当我以
www.yahoo.com
作为种子时,它会做一些非常奇怪的事情。它没有从
DownloadString
调用中返回html标记,而是返回了一堆胡言乱语

我对
DownloadString
函数的理解是,当你在网页上
查看页面源代码时,它基本上会返回你看到的内容,但事实并非如此,因为当我在浏览器中
www.yahoo.com
上这样做时,我会按预期查看HTML

简单地看一下,我最初的想法是,这个字符串似乎是用不同的编码器编码的,而不是用来解码它的编码器,但是我看不到一种方法可以手动设置通过
System.Net.WebClient
类下载字符串时使用的编码

这是我收到的文本的一部分:

èĽyÖFÖ7ÿó)4í™本周的研究者们的自196年年的职业职业生涯的职业生涯的自196年的职业生涯的职业生涯的职业生涯的自196年的职业生涯的自196年的职业生涯的职业生涯的职业生涯的职业生涯的职业生涯的自自自自196年的职业生涯的职业生涯的职业生涯的职业生涯的职业生涯的自自自自196年的职业生涯的职业生涯的职业生涯的职业生涯的自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自7Y€Sõ3ú/w 2žB†šS.í³+·7s®“9XÚQžržEÆAžŒùfÊÿߩāߩāKèp


因此,我的第一个问题是,有人知道我从
www.yahoo.com
中提取html时是否做错了什么吗?如果是这样的话,我是否应该用另一种方式提取html?我的下一个问题是,如果这是设计的,那么他们是如何实现的?为什么他们会把它弄乱?他们是否试图保持竞争力阻止访问者对其网站进行爬网?

雅虎似乎特别关注用户代理。您可以指定此选项以获得相应的纯文本响应:

    Using webRequest As WebClient = New WebClient
        webRequest.Headers(HttpRequestHeader.UserAgent) = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)"
        Dim url As String = "http://www.yahoo.com"
        Dim webPage As String = webRequest.DownloadString(url)
        Debug.WriteLine(webPage)
    End Using

似乎任何useragent,甚至“test”都可以工作,所以他们只希望头值在那里。这就成功了。我从没想过要检查它,谢谢!没问题-很高兴能帮上忙