【问题标题】:WebClient.DownloadString getting gibberishWebClient.DownloadString 变得乱码
【发布时间】:2016-11-16 18:58:40
【问题描述】:

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

它适用于大多数地址,但是当我以 www.yahoo.com 作为种子开始它时,它会做一些非常奇怪的事情。而不是从 DownloadString 调用中获取 html 标记,而是得到一堆乱码。

我对@9​​87654325@ 功能的理解是,它基本上会返回您在网页上view page source 时看到的内容,但事实并非如此,因为当我在浏览器中对www.yahoo.com 执行此操作时,我按预期查看 HTML。

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

这是我收到的部分文字:

‹Ä½y“£FÖ7úÿó)4í™ûQ«Ä.è;^´ïû~ûvH€Ö ÷›€ÈL©ªì‰{­» gÉ“'OîÉ¿ÿQî•Æ‹~%cûÿùwøŸŒ¥þþEÜ¥|ÉØ’cüþEsr“Ñ—ŒbK¾KËlδâÚûãg윻2}×Ïy€S°õ3úü/w 2žB†©š.íí ³±+·7s®“9XÚQórže˜AƼŒªùëÀÝfÊ×ÿÊë€" µdÙ¾¤k_2~p¶µß¿È

所以我最初的问题是,有没有人知道我从www.yahoo.com 提取 html 时是否做错了什么?如果是这样,还有另一种我应该拉动html的方法吗?我的下一个问题是,如果这是设计使然,那么他们是如何做到这一点的?他们为什么要争先恐后?他们是否试图阻止竞争对手抓取他们的网站?

【问题讨论】:

    标签: html vb.net web encoding webclient


    【解决方案1】:

    雅虎似乎对用户代理很讲究。您可以指定它以获得适当的纯文本响应:

        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
    

    【讨论】:

    • 似乎任何用户代理,甚至“测试”都有效,所以他们只希望该标头值存在。
    • 成功了。我从没想过要检查一下,谢谢!
    • 没问题 - 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2012-04-03
    • 1970-01-01
    • 2010-09-25
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多