Foxtable(狐表)用户栏目专家坐堂 → 请教版主获取网页数据项目的问题


  共有2891人关注过本帖树形打印复制链接

主题:请教版主获取网页数据项目的问题

帅哥哟,离线,有人找我吗?
有点色
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 10:53:00 [显示全部帖子]

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate("http://youjia.chemcp.com/YuanYouJiaGe.asp")

Do Until web.ReadyState = 4
    Application.DoEvents
Loop


'取数据
Dim Cols() As String = { "名称","价格","涨跌额","涨跌幅","发布日期" }

Dim elems As object = web.Document.GetElementsByTagName("table")(5).GetElementsByTagName("tr")
Dim m As Integer = 0
Dim t As Table = Tables("国际市场原油价格表")
For Each elem As object In elems
    Dim i As Integer = -1
    m = m + 1
    If m > 1 Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
        t.AddNew
    End If
   
    Dim tdelems As object =  elem.GetElementsByTagName("td")
    For Each tdelem As object In tdelems
        i = i + 1
        If t.Cols(i).IsNumeric Then
            t.Current(Cols(i)) = val(tdelem.Innertext.replace("↓", "").replace("↑", "").replace("%", ""))
            t.Current("录入日期") = Date.Today
        Else
            t.Current(Cols(i)) = tdelem.Innertext
            t.Current("录入日期") = Date.Today
        End If
    Next
Next
t.save


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 11:20:00 [显示全部帖子]

 获取各列的值,这样写

 

tdelems(0).Innertext

tdelems(1).Innertext

tdelems(2).Innertext

 

 那么,你合并成条件,然后find表格,不就行了?


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 11:44:00 [显示全部帖子]

1、请读懂代码;

 

2、直接合成条件查表,如果存在,就不新增数据


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 11:52:00 [显示全部帖子]

 你获取数据的时候,不是可以直接查找是否已经存在相同数据吗?判断名称和日期,就行。


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 12:59:00 [显示全部帖子]

 谁叫你写在datacolchanged事件。

 

 你直接在3楼的代码,查询表格数据,就行啊。


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/11 14:14:00 [显示全部帖子]

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate("http://youjia.chemcp.com/YuanYouJiaGe.asp")

Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim Cols() As String = { "名称","价格","涨跌额","涨跌幅","发布日期" }

Dim elems As object = web.Document.GetElementsByTagName("table")(5).GetElementsByTagName("tr")
Dim t As Table = Tables("国际市场原油价格表")

For i As Integer = 1 To elems.count-1
    Dim tdelems As object =  elems(i).GetElementsByTagName("td")
    Dim fdr As DataRow = t.DataTable.Find("名称 = '" & tdelems(0).Innertext & "' and 发布日期 = #" & tdelems(4).Innertext & "#")
    If fdr Is Nothing Then
        fdr = t.DataTable.AddNew
    End If
    For j As Integer = 0 To Cols.length-1
        If t.Cols(j).IsNumeric Then
            fdr(Cols(j)) = val(tdelems(j).Innertext.replace("↓", "").replace("↑", "").replace("%", ""))
            fdr("录入日期") = Date.Today
        Else
            fdr(Cols(j)) = tdelems(j).Innertext
            fdr("录入日期") = Date.Today
        End If
    Next
Next
t.save


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/17 17:49:00 [显示全部帖子]

 调整列位置不影响数据位置,但你这句代码要改一下

 

If t.Cols(Cols(j)).IsNumeric Then

[此贴子已经被作者于2017/1/18 9:48:21编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/18 9:48:00 [显示全部帖子]

哦,错了,改一下代码即可

 

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate("http://youjia.chemcp.com/YuanYouJiaGe.asp")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop
Dim Cols() As String = {"名称","价格","涨跌额","涨跌幅","发布日期" }
Dim ts = web.Document.GetElementsByTagName("table")
If ts.count <= 5 Then
    MessageBox.show("网络连接失败,请检查网络设置!")
Else
    Dim elems As object = web.Document.GetElementsByTagName("table")(5).GetElementsByTagName("tr")
    Dim t As Table = Tables("国际市场原油价格表")
    For i As Integer = 1 To elems.count-1
        Dim tdelems As object =  elems(i).GetElementsByTagName("td")
        Dim fdr As DataRow = t.DataTable.Find("名称 = '" & tdelems(0).Innertext & "' and 发布日期 = #" & tdelems(4).Innertext & "#")
        If fdr Is Nothing Then
            fdr = t.DataTable.AddNew
        End If
        For j As Integer = 0 To Cols.length-1
            If t.Cols(Cols(j)).IsNumeric Then
                fdr(Cols(j)) = val(tdelems(j).Innertext.replace("↓", "").replace("↑", "").replace("%", ""))
            Else
                fdr(Cols(j)) = tdelems(j).Innertext
            End If
        Next
        fdr("更新时间") = Date.Now
    Next
    t.save
    Tables("国际市场原油价格表").Sort = "发布日期 DESC"
End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/1/18 10:24:00 [显示全部帖子]

t.Cols(j) 这个j是数字1、2、3、4,那么就是按照数值取列

 

t.Cols(cols(j)) 这个cols(j)是字符 名次、价格、发布日期,那么就是按照字符取列,不受列顺序的影响


 回到顶部