Usuário com melhor resposta
Pegar Texto de uma linha de um html e colocar em um textbox

Pergunta
-
Boa Noite Pessoal,
Estou fazendo uma rotina em vb.net, e gostaria de pegar uma linha de uma pagina web, por exemplo essa linha abaixo,
<h3 id="dia-topo">Domingo, 30 de julho de 2017</h3>
mas gostaria de colocar somente o que esta dentro >Domingo, 30 de julho de 2017<, e depois deixar somente o dia na text box, isso e possivel mas não achei na net como fazer isso, achei varios coisas sobre html, ler a pagina, pegar os links da pagina, mas pegar uma linha especifica como essa acima não consegui, alguem tem uma ideia de como fazer isso.
Desde já agradeço muito.
Pablo Sousa
PabloSousa
Respostas
-
Acho que agora sim:
Dim wc As New WebClient() Dim conteudo As String = wc.DownloadString("http://www.horariodebrasilia.org/") ' aqui não achei erro no caminho??? Dim doc As New HtmlDocument() doc.LoadHtml(conteudo) Dim text As String = doc.DocumentNode.SelectSingleNode("//h3[@id='dia-topo']").InnerText
Não estava num PC com Visual Studio, foi mal.
Duas coisas:
Não rolou com o Serializer mesmo, estou usando o HTMLAgilityPackage mesmo que é bem melhor pra esse tipo de tarefa. Instala ele no seu projeto via Nugget, aí é só usar (Install-Package HtmlAgilityPack).
Rafael Esquiçato Professional Scrum Master MCP, MCTS
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 31 de julho de 2017 13:44
-
Boa Noite Pessoal,
Consegui resolver o problema acima, dessa forma abaixo, simples de tudo.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' pega linha do html Me.TextBox1.Text = WebBrowser1.Document.GetElementById("dia-topo").InnerText & " - " & WebBrowser1.Document.GetElementById("relogio").InnerText End Sub
para quem estiver procurando esse codigo funciona bem.
Pablo Sousa.
PabloSousa
- Marcado como Resposta Pablo_1977 terça-feira, 8 de agosto de 2017 03:08
Todas as Respostas
-
Pablo,
Se você usar XmlSerializer e tratar o documento HTML como um XML (que ele é estruturalmente) vai funcionar se usar com esse trecho:
XmlDocument doc = new XmlDocument();
doc.Load("Caminho do seu documento");
var text = doc.SelectSingleNode("//div[@id='dia-topo']").InnerText;
Porém sugiro usar esse componente aqui (http://html-agility-pack.net/?z=codeplex) que já tem uns utilitários pra trabalhar com HTML mesmo:
var doc = new HtmlDocument(); doc.Load(filePath);
doc.DocumentNode .SelectNodes("//div[@id='dia-topo']").InnerText
Rafael Esquiçato Professional Scrum Master MCP, MCTS
-
-
-
Boa Noite Rafael,
Rafael fiz o teste aqui e deu um erro, O caractere ';', valor hexadecimal 0x3B, não pode ser incluído em um nome. Linha 12, posição 11046.
Caminho do documento e a url do site???
fiz assim e deu erro,
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim doc As New XmlDocument() doc.Load("http://www.horariodebrasilia.org") Dim text As String = doc.SelectSingleNode("//div[@id='dia-topo']").InnerText Me.TextBox1.Text = text End Sub
Desde já agradeço atenção, muito obrigado.
PabloSousa
-
Não não, nesse caso o caminho do documento seria um caminho na sua máquina mesmo, pra pegar do site vai precisar uma outra classe, a WebClient:
Dim wc as new WebClient()
Dim conteudo As String = wc.DownloadString("URL do site)
doc.Load(conteudo)
Se o site tiver um HTML redondo vai funcionar, caso contrário vai precisar do AgitlityPack, a sintaxe dele é bem parecida com o XmlDocument, acho que ele já tem até uns métodos pra buscar o HTML direto de um site (aí nem precisaria do webClient).
Rafael Esquiçato Professional Scrum Master MCP, MCTS
-
Boa Noite Rafael,
Obrigado pela ajuda, mas deu erro novamente, doc.Load(conteudo) ' erro aqui "Caracteres inválidos no caminho."
rafael não entendi, segue abaixo o codigo,
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim wc As New WebClient() Dim conteudo As String = wc.DownloadString("http://www.horariodebrasilia.org/") ' aqui não achei erro no caminho??? Dim doc As New XmlDocument() doc.Load(conteudo) ' erro aqui "Caracteres inválidos no caminho." Dim text As String = doc.SelectSingleNode("//div[@id='dia-topo']").InnerText Me.TextBox1.Text = text End Sub
Desde já agradeço, muito obrigado.
Pablo Sousa
PabloSousa
-
Acho que agora sim:
Dim wc As New WebClient() Dim conteudo As String = wc.DownloadString("http://www.horariodebrasilia.org/") ' aqui não achei erro no caminho??? Dim doc As New HtmlDocument() doc.LoadHtml(conteudo) Dim text As String = doc.DocumentNode.SelectSingleNode("//h3[@id='dia-topo']").InnerText
Não estava num PC com Visual Studio, foi mal.
Duas coisas:
Não rolou com o Serializer mesmo, estou usando o HTMLAgilityPackage mesmo que é bem melhor pra esse tipo de tarefa. Instala ele no seu projeto via Nugget, aí é só usar (Install-Package HtmlAgilityPack).
Rafael Esquiçato Professional Scrum Master MCP, MCTS
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 31 de julho de 2017 13:44
-
-
Boa Tarde Rafael!!!
Obrigado pela ajuda que tens dado, mas não consegui fazer desse jeito que você falou, tenho um codigo aqui que peguei no site do dinossauro do vb.net, marcoratti, segue abaixo, ele le a pagina os links, se que com ele não da para colocar mais uma linha para ler o atributo ou linha especifica como essa que estou tentando ler e colocar no textbox?
codigo abaixo,
Public Class Web Public Function RequestDadosWeb(ByVal pstrURL As String) As String Dim oWebRequest As WebRequest Dim oWebResponse As WebResponse = Nothing Dim strBuffer As String = "" Dim objSR As StreamReader = Nothing 'conecta com o website Try oWebRequest = HttpWebRequest.Create(pstrURL) oWebResponse = oWebRequest.GetResponse() 'Le a resposta do web site e armazena em uma stream objSR = New StreamReader(oWebResponse.GetResponseStream) strBuffer = objSR.ReadToEnd Catch ex As Exception Throw ex Finally objSR.Close() oWebResponse.Close() End Try Return strBuffer End Function Public Function ExtrairLinks(ByVal url As String) As DataTable Dim dt As New DataTable dt.Columns.Add("LinkTexto") dt.Columns.Add("LinkUrl") Dim wc As New WebClient Dim html As String = wc.DownloadString(url) Dim links As MatchCollection = Regex.Matches(html, "<a.*?href=""(.*?)"".*?>(.*?)</a>") For Each match As Match In links Dim dr As DataRow = dt.NewRow Dim matchUrl As String = match.Groups(1).Value 'Ignora todos os links âncoras If matchUrl.StartsWith("#") Then Continue For End If 'Ignora todas as chamadas javascript If matchUrl.ToLower.StartsWith("javascript:") Then Continue For End If 'Ignora todos os links de email If matchUrl.ToLower.StartsWith("mailto:") Then Continue For End If 'Para links internos, constroi a url mapeada para o endereço base If Not matchUrl.StartsWith("http://") And Not matchUrl.StartsWith("https://") Then matchUrl = MapearUrl(url, matchUrl) End If 'Inclui o link no datatable dr("LinkUrl") = matchUrl dr("LinkTexto") = match.Groups(2).Value dt.Rows.Add(dr) Next Return dt End Function Public Function MapearUrl(ByVal enderecoBase As String, ByVal caminhoRelativo As String) As String Dim u As New System.Uri(enderecoBase) If caminhoRelativo = "./" Then caminhoRelativo = "/" End If If caminhoRelativo.StartsWith("/") Then Return u.Scheme + Uri.SchemeDelimiter + u.Authority + caminhoRelativo Else Dim Caminho_Consulta As String = u.AbsolutePath ' Se o enderecoBase contem o nome do arquivo como ..../Something.aspx ' ajusta o nome do arquivo Caminho_Consulta = Caminho_Consulta.Split("?")(0).TrimEnd("/") If Caminho_Consulta.Split("/")(Caminho_Consulta.Split("/").Count - 1).Contains(".") Then Caminho_Consulta = Caminho_Consulta.Substring(0, Caminho_Consulta.LastIndexOf("/")) End If enderecoBase = u.Scheme + Uri.SchemeDelimiter + u.Authority + Caminho_Consulta 'se o caminhoRelativo contém ../ então ' ajusta o enderecoBase While caminhoRelativo.StartsWith("../") caminhoRelativo = caminhoRelativo.Substring(3) If enderecoBase.LastIndexOf("/") > enderecoBase.IndexOf("//" + 2) Then enderecoBase = enderecoBase.Substring(0, enderecoBase.LastIndexOf("/")).TrimEnd("/") End If End While Return enderecoBase + "/" + caminhoRelativo End If End Function End Class
Private Sub btnObterPagina_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnObterPagina.Click Try Dim wc As New Web txtDados.Text = wc.RequestDadosWeb(txtUrl.Text.Trim) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
Desde já agradeço, muito obrigado.
Pablo Sousa.
PabloSousa
-
Boa Noite Pessoal,
Consegui resolver o problema acima, dessa forma abaixo, simples de tudo.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' pega linha do html Me.TextBox1.Text = WebBrowser1.Document.GetElementById("dia-topo").InnerText & " - " & WebBrowser1.Document.GetElementById("relogio").InnerText End Sub
para quem estiver procurando esse codigo funciona bem.
Pablo Sousa.
PabloSousa
- Marcado como Resposta Pablo_1977 terça-feira, 8 de agosto de 2017 03:08