【问题标题】:Abot Crawler - How to detect null responseAbot Crawler - 如何检测空响应
【发布时间】:2016-11-08 12:30:03
【问题描述】:

我正在使用 vb.net 并且有一些 URL 拒绝被抓取。我真的很想检测爬网何时返回空响应,但似乎在弄清楚 HOW 时遇到了问题。

代码:

Public Sub crawler_ProcessPageCrawlCompleted(sender As Object, e As PageCrawlCompletedArgs)

    pageNumber += 1
    Try

        Dim crawledPage As CrawledPage = e.CrawledPage


        If (Not (crawledPage.HttpWebResponse Is Nothing) And Not (crawledPage.WebException Is Nothing)) Or crawledPage.HttpWebResponse.StatusCode <> HttpStatusCode.OK Then
            CrawlFailed(e.CrawledPage.ToString, Failed)
        Else

            If String.IsNullOrEmpty(crawledPage.Content.Text) Then
                CrawlFailed(e.CrawledPage.ToString, NoContent)
            Else
                StoreContent(e)
            End If

        End If


    Catch ex As Exception
        RichTextBox1.AppendText(e.CrawledPage.ToString & " - " & ex.Message & vbCrLf)
    End Try

End Sub

我放入了 Catch-Try 来捕获该异常,但我真的更愿意在我的 CrawlFailed 子例程中捕获它以使用该 URL做某事

我试图弄清楚如何使用 GetResponseStream 和 Stream.Null,但似乎无法弄清楚如何检测空流:( 我只是遗漏了一些东西,但我已经到处搜索了我能找到的最好的是这个帖子:crawledPage.HttpWebResponse is null in Abot

但是 - 这并不能真正解释如何检测和编码结果。

【问题讨论】:

  • GetResponseStream and Stream.Null?你的意思是这个问题(stackoverflow.com/questions/22921555/…)?您不需要检查 Stream.Null 并且这样做没有任何效果。此外,HTTP 无法识别“空”响应,但您可以通过读取空流或可能使用 Length 属性来检测空流。
  • 我确实读过了,虽然我刚刚看到你对它的最终分析。由于我使用的是 Abot,所以我不太确定如何检测它作为输出提供给我的任何内容,那么呢?我确定我在您的回复@usr 中遗漏了一些东西,也许您可​​以帮助我理解?
  • 我对 Abot 一无所知,但如果 crawledPage.HttpWebResponse 的类型为 HttpWebResponse,那么我的回答适用。只需从该流中读取以获取内容并可能发现它是空的。如果您无法完成这项工作,请发布阅读代码。

标签: vb.net web-crawler getresponsestream


【解决方案1】:

我遇到了同样的问题(dotnet 核心),通过提琴手会话,我可以看到响应确实来了。但我也看到网站返回结果需要很长时间。

尝试将 config.HttpRequestTimeoutInSeconds 设置为更高的值。它解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多