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


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

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

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
请教版主获取网页数据项目的问题  发帖心情 Post By:2017/1/11 10:27:00 [显示全部帖子]

http://youjia.chemcp.com/YuanYouJiaGe.asp

 

想获得油价表格中的数据并保存到“国际市场油价数据表”中

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170111100906.jpg
图片点击可在新窗口打开查看

 

参考这个例子:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=49278

 

我做得项目总有错误提示,紧接着我的整个预览窗口都无法关闭了,只能关闭整个进程,并且获取不到任何数据,清版主指导。

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170111100740.jpg
图片点击可在新窗口打开查看

 

项目文件:
 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:原油价格自动获取.foxdb


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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 10:39:00 [显示全部帖子]

好像web.Document.GetElementById("container")这个也不对,这个数据表没有 ID

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 11:02:00 [显示全部帖子]

 有点色版主效率越来越高了。

  顺利获取数据,能把重复的数据删除了吗?如果存在相同的数据,就不再录入相同的了。因为要通过计时器自动获取数据,当前网页上有几天的数据,每天自动检查一遍,如果不剔除重复的数据的话,就会有多条相同的数据(录入时间不同)。
[此贴子已经被作者于2017/1/11 11:07:52编辑过]

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 11:29:00 [显示全部帖子]

不太明白。你的意思是,判断表格中的数据,包括名称,涨跌额,涨跌幅等,如果存在相同的,然后find?


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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 11:50:00 [显示全部帖子]

一会儿测试如下方案是否可行
http://www.foxtable.com/help/index.htm?page=2481.htm

Select Case e.DataCol.name
    Case
 "型号","规格"
        
Dim dr As DataRow = e.DataRow
        
If dr.IsNull("型号") = False AndAlso dr.IsNull("规格") = False Then
            If e.DataTable.Compute("Count([_Identify])","型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "'") > 1 Then
                MessageBox.Show(
"已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.
DataRow(e.DataCol.Name) = e.OldValue '取消输入
            
End If
        End
 If
End
 
Select

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 12:38:00 [显示全部帖子]

 Select Case e.DataCol.name
    Case "名称","发布日期"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("名称") = False AndAlso dr.IsNull("发布日期") = False Then
            If e.DataTable.Compute("Count([_Identify])","名称 = '" & dr("名称") & "' And 发布日期 = '" & dr("发布日期") & "'") > 1 Then
                MessageBox.Show("已经存在相同名称和发布日期的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.DataRow(e.DataCol.Name) = e.OldValue '取消输入
            End If
        End If
End Select

把这个代码直接放在DataChanged中,虽然能投提示已经存在相同的行,但是同样会保存相同的数据。 

Select Case e.DataCol.name
    Case "名称","发布日期"
        Dim xh As String
        Dim gg As String
        If e.DataCol.Name= "名称" Then
            xh = e.NewValue
            gg = e.DataRow("发布日期")
        Else
            gg = e.NewValue
            xh = e.DataRow("名称")
        End If
        If xh > "" AndAlso gg  > "" Then 
            Dim dr As DataRow = e.DataRow
            If e.DataTable.Find("名称 = '" & xh & "' And 发布日期 = '" & gg & "'") IsNot Nothing Then
                MessageBox.Show("已经存在相同名称和发布日期的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.Cancel = True
            End If
        End If
End Select

把上述代码放在DataChanging中也无效。
[此贴子已经被作者于2017/1/11 12:51:21编辑过]

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 13:34:00 [显示全部帖子]

实在不会了,获取网页数据的这段代码基本看不懂,请版主直接给例子吧。

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/11 14:20:00 [显示全部帖子]

多谢版主!

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


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/17 17:05:00 [显示全部帖子]

版主,我调整了一下我的表格的列的顺序,

以前应该是"名称","价格","涨跌额","涨跌幅","发布日期",现在把“发布日期”放在第一列了,错误提示如下

 

.NET Framework 版本:2.0.50727.8745
Foxtable 版本:2016.7.29.1
错误所在事件:窗口,国际市场原油价格窗口,Button1,Click
详细错误信息:
从类型“Double”到类型“Date”的转换无效。

 


图片点击可在新窗口打开查看此主题相关图片如下:表结构.png
图片点击可在新窗口打开查看

 

代码如下,红色部分好像有问题,弹出错误提示在4之后。


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")
MessageBox.show("1")
        Dim fdr As DataRow = t.DataTable.Find("名称 = '" & tdelems(0).Innertext & "' and 发布日期 = #" & tdelems(4).Innertext & "#")
MessageBox.show("2")
        If fdr Is Nothing Then
            fdr = t.DataTable.AddNew
MessageBox.show("3")
        End If
        For j As Integer = 0 To Cols.length-1
            If t.Cols(j).IsNumeric Then
MessageBox.show("4")
                fdr(Cols(j)) = val(tdelems(j).Innertext.replace("↓", "").replace("↑", "").replace("%", ""))
MessageBox.show("5")
            Else
MessageBox.show("6")
                fdr(Cols(j)) = tdelems(j).Innertext
            End If
        Next
        fdr("更新时间") = Date.Now
MessageBox.show("7")
    Next
    t.save
    Tables("国际市场原油价格表").Sort = "发布日期 DESC"
    MessageBox.show("数据更新完毕!")
End If


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/1/17 18:42:00 [显示全部帖子]

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

也有如下错误:

 

.NET Framework 版本:2.0.50727.5420
Foxtable 版本:2016.6.26.1
错误所在事件:窗口,窗口1,Button1,Click
详细错误信息:

从字符串“布伦特”到类型“Date”的转换无效。

 

项目文件如下:

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:油价自动获取.table


 回到顶部
总数 14 1 2 下一页