テレビの一覧ページから取得した次の HTML コードがあります。
<div class="channel_row">
<span class="channel">
<div class="logo"><img src ="/images/channel_logos/WGNAMER.png" /></div>
<p><strong>2</strong><br />
WGNAMER
</p>
</span>
<span class="time" style="width:0.0px;padding:0;height:42px;">
<div style="margin:10px">
<a class="thickbox" style="" href="/tv/info/?program_id=49909&height=260&width=612" title="WGN News at Nine">WGN News at Nine</a>
<p class="schedule_flags"><strong class="new_flag">New</strong>, <strong class="cc_flag">CC</strong>, <strong class="stereo_flag">Stereo</strong></p>
</div>
</span>
<span class="time" style="width:245.6px;padding:0;height:42px;">
<div style="margin:10px">
<a class="thickbox" style="" href="/tv/info/?program_id=49910&height=260&width=612" title="America's Funniest Home Videos">America's Funniest Home Videos</a>
<p class="schedule_flags"><strong class="cc_flag">CC</strong>, <strong class="stereo_flag">Stereo</strong></p>
</div>
</span>
</div>
そして、 channel_rowで何度もループし続けます...
ここで、 HtmlAgilityPackの助けを借りていくつかの VB コードをセットアップしました。これらすべてのクラスをすばやく簡単にループして、ロゴ画像、テレビ チャンネル、ステーション名、その他の番組の説明と番組のタイトルの HREF を取得する方法を期待しています。
したがって、上記の例では、解析は次のようになります。
/images/channel_logos/WGNAMER.png
2
WGNAMER
/tv/info/?program_id=49909&height=260&width=612
WGN News at Nine
/tv/info/?program_id=49910&height=260&width=612
America's Funniest Home Videos
私のVBコードは次のとおりです。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim htmlString As String = "<div class=""channel_row"">" & _
"<span class=""channel"">" & _
"<div class=""logo""><img src =""/images/channel_logos/WELF.png"" /></div>" & _
"<p><strong>13</strong><br />" & _
"WELF" & _
"</p>" & _
"</span>" & _
"<span class=""time"" style=""width:245.6px;padding:0;height:42px;"">" & _
"<div style=""margin:10px"">" & _
"<a class=""thickbox"" style="""" href=""/tv/info/?program_id=35424&height=260&width=612"" title=""Praise the Lord"">Praise the Lord</a>" & _
"<p class=""schedule_flags""><strong class=""cc_flag"">CC</strong></p>" & _
"</div>" & _
"</span>" & _
"<span class=""time"" style=""width:122.8px;padding:0;height:42px;"">" & _
"<div style=""margin:10px"">" & _
"<a class=""thickbox"" style="""" href=""/tv/info/?program_id=35425&height=260&width=612"" title=""ACLJ This Week"">ACLJ This Week</a> " & _
"<p class=""schedule_flags""><strong class=""cc_flag"">CC</strong></p>" & _
"</div>" & _
"</span>" & _
"<span class=""time"" style=""width:122.8px;padding:0;height:42px;"">" & _
"<div style=""margin:10px"">" & _
"<a class=""thickbox"" style="""" href=""/tv/info/?program_id=35426&height=260&width=612"" title=""Full Flame"">Full Flame</a> " & _
"<p class=""schedule_flags""><strong class=""cc_flag"">CC</strong></p>" & _
"</div>" & _
"</span>" & _
"<span class=""time"" style=""width:0.0px;padding:0;height:42px;"">" & _
"<div style=""margin:10px"">" & _
"<a class=""thickbox"" style="""" href=""/tv/info/?program_id=35427&height=260&width=612"" title=""Secrets: Kim Clement"">Secrets: Kim Clement</a> " & _
"<p class=""schedule_flags""></p>" & _
"</div>" & _
"</span>" & _
"</div>"
Dim doc = New HtmlAgilityPack.HtmlDocument()
Dim htmlDocument As IHTMLDocument2 = New HTMLDocumentClass()
htmlDocument.write(htmlString)
htmlDocument.close()
doc.LoadHtml(String.Format(htmlString))
Dim res = doc.DocumentNode.SelectNodes("//div[@class='channel_row']")
For Each item In res
Dim firstDiv = item.SelectSingleNode(".//div[@class='channel']")
Dim content1 = firstDiv.ChildNodes(0).InnerText.Trim()
Dim content2 = firstDiv.ChildNodes(1).InnerText.Trim()
Dim content4 = item.SelectSingleNode(".//div[@class='myclass2']")
Next
End Sub
現在、エラーはDim content1 = firstDiv.ChildNodes(0).InnerText.Trim() 行にあります。
オブジェクト参照がオブジェクト インスタンスに設定されていません。
どんな助けでも素晴らしいでしょう!
アップデート
最新のコードの提案:
Dim doc = New HtmlAgilityPack.HtmlDocument()
doc.LoadHtml(htmlString)
Dim all = new Dictionary(of String, Object)()
For Each channel In doc.DocumentNode.SelectNodes(".//div[@class='channel_row']")
Dim info = new Dictionary(of String, Object)()
With channel
info!Logo = .SelectSingleNode(".//img").Attributes("src").Value
info!Channel = .SelectSingleNode(".//span[@class='channel']").ChildNodes(1).ChildNodes(0).InnerText
info!Station = .SelectSingleNode(".//span[@class='channel']").ChildNodes(1).ChildNodes(2).InnerText
info!Shows = From tag In .SelectNodes(".//a[@class='thickbox']")
Select New With {.Show = tag.Attributes("title").Value, .Link = tag.Attributes("href").Value}
End With
all.Add(info!Station, info)
Next
all.Dump()
3 つのエラーがあります。
1) オンラインで[New With {.Show = Tag.Attributes("title").Value, .Link = Tag.Attributes("href").Value}] を選択します。
エラー: 'Select Case' は、一致する 'End Select' で終了する必要があります。
2) オンラインall.Add(info!Station, info)
エラー: 'Select Case' と最初の 'Case' の間でステートメントとラベルが無効です。
3) オンラインall.Dump()
エラー: 「ダンプ」は「System.Collections.Generic.Dictionary(Of String, Object)」のメンバーではありません。