【发布时间】: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