关于解析网页的问题

pingker 2012-06-17 02:16:50
最近想学习一下网页解析,不知道各位大哥有没有vb.net的例子。

遇到的困难是这样:
1、寻找解析html的dll
2、dll需指定ID进行解析---寻找ID---使用xpath寻找ID---html不是标准的xml文件,需转换成标准的xml格式。
问题很多,感觉很迷惘。
我想解析百度的mp3.baidu.com,获取歌手列表。请高手指教。
...全文
140 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
htpower 2012-06-20
  • 打赏
  • 举报
回复
<div class="singer"><a target="_blank" href="和</a>
都是一样的~那你就可以从这里获取到值,然后将这个值重组成XML,再进行你的xpath,或者说~连XPATH都不用~
直接从网上拉回来~程序分析后就可以入数据库了,数据库怎么读~这就由你了~
pingker 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/刘德华.html" >刘德华</a>
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/凤凰传奇.html" >凤凰传奇</a>
<div……
[/Quote]
htpower,你好。
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/刘德华.html" >刘德华</a>
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/凤凰传奇.html" >凤凰传奇</a>
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/李宇春.html" >李宇春</a>
......看出什么没?

这个确实没怎么看懂。因为我刚学习。
你的例子写的很棒,是通过字符串搜索的吧。我很希望有更多的例子是通过xpath的。
如果大哥不嫌弃,希望可以私下保持联络。谢谢!Q已经私信给你了。
htpower 2012-06-19
  • 打赏
  • 举报
回复
我这里只获取一个~你这是要多个的~可以用正则表达式来match
htpower 2012-06-19
  • 打赏
  • 举报
回复
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/刘德华.html" >刘德华</a>
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/凤凰传奇.html" >凤凰传奇</a>
<div class="singer"><a target="_blank" href="http://mp3.baidu.com/singerlist/李宇春.html" >李宇春</a>
......看出什么没?

'根据URL获取HTML
Private Function luck(ByVal url As String) As String
Dim wait As New Form
Dim l As New Label
l.Text = "正在查询网络数据...请稍候..."
wait.FormBorderStyle = Windows.Forms.FormBorderStyle.None
wait.ClientSize = New System.Drawing.Size(292, 64)
wait.WindowState = FormWindowState.Normal
wait.StartPosition = FormStartPosition.CenterScreen
l.Location = New System.Drawing.Point(55, 23)
wait.Controls.Add(l)
wait.Show()
wait.Refresh()
Try
Dim req As Net.HttpWebRequest = Net.WebRequest.Create(url)
Dim res As Net.HttpWebResponse = req.GetResponse()
Dim strm As IO.StreamReader = New IO.StreamReader(res.GetResponseStream(), System.Text.Encoding.GetEncoding(0))
luck = strm.ReadToEnd()
Catch ex As Exception
MsgBox("网络错误!" + ex.Message, MsgBoxStyle.Exclamation, "网络错误")
luck = ""
End Try
wait.Dispose()
End Function

'分析HTML,这部份我写得不好~分析部份建议你参考别的方法
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim url As String
url = "http://luck.cha.la/search/?kw=" & TextBox1.Text.Trim & "&kc=Cha.La&ow="
Dim str As Object = luck(url)
Dim st As String = "color:#f60;font-size:26px"
Dim over As String = "</div><br /><font color"
str = Split(str, st)
str = Split(str(1), over)
Dim show As Object
show = Replace(str(0), ";" & Chr(34) & ">", "")
show = Split(show, "</span><br />")
Label1.Text = show(0)
Label2.Text = show(1)
End Sub

原贴:http://topic.csdn.net/u/20090226/00/289ea2e6-b2a5-4e6d-a1e2-18dbe5fb60fc.html
pingker 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 3 楼 的回复:

引用 1 楼 的回复:
用这个
http://htmlagilitypack.codeplex.com/
解析HTML的,支持XPath和LINQ

在比较著名的博客园例子里面,有这样一段代码
VB.NET code

For Each child As HtmlNode In node.ChildNodes
If child.Attrib…………
[/Quote]

我想解析MP3.baidu.com网页,获取歌手排行。

需得知2个参数:
1、GetElementbyId(ID)
2、SelectSingleNode(xpath表达式)

您看能不能帮帮我?
pingker 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

我这里只获取一个~你这是要多个的~可以用正则表达式来match
[/Quote]
我使用xpath的绝对路径搞定了,谢谢你,有空可以常联系。
hhddzz 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:
用这个
http://htmlagilitypack.codeplex.com/
解析HTML的,支持XPath和LINQ

在比较著名的博客园例子里面,有这样一段代码
VB.NET code

For Each child As HtmlNode In node.ChildNodes
If child.Attrib……
[/Quote]
对,也有SelectNodes,总之用法和BCL的XML库差不多
pingker 2012-06-18
  • 打赏
  • 举报
回复
不知道这个maindata从哪里来的。
pingker 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
HtmlElement HtmlDocument
[/Quote]
大哥是否可以举一些简单点的例子,小弟初学,感激不尽。
pingker 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
用这个
http://htmlagilitypack.codeplex.com/
解析HTML的,支持XPath和LINQ
[/Quote]
在比较著名的博客园例子里面,有这样一段代码

For Each child As HtmlNode In node.ChildNodes
If child.Attributes("class") Is Nothing OrElse child.Attributes("class").Value <> "post_item" Then
Continue For
End If
Dim hn As HtmlNode = HtmlNode.CreateNode(child.OuterHtml)

'''如果用child.SelectSingleNode("//*[@class=\"titlelnk\"]").InnerText这样的方式查询,是永远以整个document为基准来查询,
'''这点就不好,理应以当前child节点的html为基准才对。


如果用xpath,就需要使用SelectSingleNode方法,是这样吗?
rayyu1989 2012-06-18
  • 打赏
  • 举报
回复
HtmlElement HtmlDocument
rayyu1989 2012-06-18
  • 打赏
  • 举报
回复
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
WebBrowser html;
private void Form1_Load(object sender, EventArgs e)
{
html = new WebBrowser();
html.DocumentText = "<html><head></head><body><div id=\"abc\">def</div></body></html>";
html.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(html_DocumentCompleted);

}
private void html_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show(html.Document.GetElementById("abc").InnerHtml);
}
}
}
hhddzz 2012-06-18
  • 打赏
  • 举报
回复
用这个
http://htmlagilitypack.codeplex.com/
解析HTML的,支持XPath和LINQ

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧