웹 페이지를 구문 분석하여 페이지의 모든 고유 한 문장을 반환합니다. 각 문장은 최소 두 단어로 구성됩니다. 거의 작동합니다. 다음은 페이지에 한 문장으로 표시되지만 내 코드는 <b></b>
태그의 텍스트를 삭제합니다. 굵은 태그 또는 강한 태그와 같은 다른 인라인 스타일의 텍스트가있는 브라우저에 나타나는 문장을 반환하는 인라인 스타일/태그를 제거하려면 어떻게합니까?HtmlAgilityPack을 사용하여 innerHtml에서 인라인 스타일을 제거하십시오.
현재 NHL 플레이 오프가 한 줄의 텍스트로 표시되고 다음 Takeaways가 첫 번째 Stanley Cup Final에서 Sharks가 펭귄을 두 번째 문장으로 이기면 정말 한 문장입니다.
<span class="titletext"><b>NHL Playoffs</b> Takeaways: Sharks beat Penguins for first Stanley Cup Final win</span>
여기 내 asp.net vb.net 코드입니다 (C# 해결책은 괜찮습니다).
Public Shared Function validateIsMoreThanOneWord(input As String, numberWords As Integer) As Boolean
If String.IsNullOrEmpty(input) Then
Return False
End If
Return (input.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries).Length >= numberWords)
End Function
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
Try
Dim html = New HtmlDocument()
html.LoadHtml(New WebClient().DownloadString("http://news.google.ca/nwshp?hl=en&ei=4H1UV7-NNOfCjwTAl4bABw&ved=0EKkuCAkoBw"))
Dim root = html.DocumentNode
Dim myList As New List(Of String)()
For Each node As HtmlNode In root.Descendants().Where(Function(n) n.NodeType = HtmlNodeType.Text AndAlso n.ParentNode.Name <> "script" AndAlso n.ParentNode.Name <> "style" AndAlso n.ParentNode.Name <> "css")
If Not node.HasChildNodes Then
Dim text As String = HttpUtility.HtmlDecode(node.InnerText)
If Not String.IsNullOrEmpty(text) And Not String.IsNullOrWhiteSpace(text) Then
If validateIsMoreThanOneWord(text.Trim(), 2) Then
myList.Add(text.Trim())
End If
End If
End If
Next
'remove dups from array and other stuff
Dim q As String() = myList.Distinct().ToArray()
For i As Integer = 0 To UBound(q)
Response.Write(q(i).Trim() & "<br/>")
Next
Response.Write(q.Count)
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
희망 사항을 통해 해결책을 찾아 볼 수 있습니다. 감사!
안녕 Veverke, 나는 페이지 (반드시이 일을) 크롤링 오전 사업부가이 유형의 서식을한다면 모르겠지만, 그것이 않는 경우 그냥 텍스트를 반환하고 싶습니다. 내가 가지고있는 코드로 이것이 가능한지 확실하지 않은가요? – Rob
'HtmlNode' 객체의'InnerText'가 맞습니까? 나는 당신이 어디에서 왔는지 모른다면 어떻게 데이터를 추출 할 수 있는지 보지 못한다. 예를 들어,이 예제에서 'titletext'로 분류 된 span 노드는 데이터를 추출 할 위치를 알고있는 경우 위의 코드를 사용하여 텍스트 *를 얻을 수 있습니다 (분명히 선을 인쇄하지는 않지만 무엇이든 할 수 있습니다 그렇지 않으면 그들과 함께). 위의 코드는 그렇게하지 않을 것입니다. – Veverke