使用webscraper下载文件有时会产生HTML页面

时间:2014-10-23 20:22:17

标签: c# web-scraping screen-scraping webclient

我有一个C#应用程序来访问第三方网站的数据。我正在使用WebClient,我调用DownloadData并处理字节(DownloadFile会产生类似的结果)。

直到最近,这个工作正常。现在,通常,我得到一个类似于:

的html页面,而不是所需的XML文件
<!-- _localBinding -->
<!-- _lcid="1033" _version="" -->
<html>
    <head>
        <meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8" />
        <meta HTTP-EQUIV="Expires" content="0" />
        <noscript>
            <meta http-equiv="refresh" content="0; url=/_layouts/spsredirect.aspx?noscript=1" />
        </noscript>
        <script language="javascript" src="/_layouts/1033/init.js"></script>
        <script language="javascript" src="/_layouts/1033/core.js"></script>
        <script language="javascript">

        var requestedUrl = escapeProperly(window.location.href);
        STSNavigate("/CustomErrors/ErrorPage.aspx?oldUrl=" + requestedUrl);

    </script>
    </head>
    <body></body>
</html>

我很难过为什么这样做从持续不断地工作到始终如一地给我带来麻烦。有时,我仍然可以获得预期的XML文件。你知道这个问题可能是什么以及如何解决它吗?

值得注意的是,如果我在浏览器中手动点击下载链接,则会在文件下载之前弹出并关闭javascript窗口。我正在使用WebBrowser拦截该弹出窗口的非静态URL,并将该链接(以及标头/ cookie信息)传递给WebClient。该链接看起来像https://foo.bar/Something.axd?Session=1234vv1234Format=XML

感谢您的时间

2 个答案:

答案 0 :(得分:0)

看起来第三方网页正在抛出异常。这可能是由于你传递的参数,或者它可能是一个问题。最好的做法是联系提供商,看看正在记录哪些错误(希望他们在某处记录它们)。否则你只会猜测你做错了什么。

会话查询字符串参数中是否有编码\转义字符可能无法正确处理?这是我的第一次猜测,因为没有任何真正的错误细节。

答案 1 :(得分:0)

如果它抛出错误,我会尝试收集HTTP状态代码,你可以通过使用HttpWebRequest和HttpWebResponse(我相信这些早期的WebClient)来做到这一点。还有一些棘手的方法仍然使用WebClient并检索状态代码,我还会在您实际下载之前检查内容类型。

在任何情况下,即使提供错误页面,服务器也应使用适当的HTTP状态代码进行响应。 (至少在一个完美的世界里)。