Foxtable(狐表)用户栏目专家坐堂 → 读取网页数据


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

主题:读取网页数据

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
读取网页数据  发帖心情 Post By:2019/3/9 15:30:00 [显示全部帖子]

我想要将网址:http://www.caacaad.org.cn/index.php?a=2&t=1的数据读取出来,但其中每个适航指令的发布日期并未在网页的表格里,而是在链接的pdf里,这种有办法读出来吗?

已经写好的代码如下,缺少读取pdf中发布日期的代码,求大神相助,谢谢。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:网页数据读取--ad.table


[此贴子已经被作者于2019/3/9 15:30:51编辑过]

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/9 16:46:00 [显示全部帖子]

有点蓝老师,我的意思是
图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看
每个文件的发布日期在标题栏链接的那个pdf里,这种有办法读取出来吗

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/11 23:25:00 [显示全部帖子]

嗯嗯,谢谢各位老师,现在又有一个新的问题,我想把读取出来的数据中不符合要求的自动删掉,例如指令编号如果不包含A320,那么删除此行,我现在的代码如下,但就是删除行的操作报错。(因为指令编号字符数不定,感觉like无法满足要求)
Dim web As New System.Windows.Forms.WebBrowser()
Dim Cols() As String = { "指令编号","修正案号","标题","生效日期", "获取日期" }

For pg As Integer = e.Form.Controls("textbox1").Value To e.Form.Controls("textbox2").Value
'Dim pg As Integer = 1
    Dim wz As String = "http://www.caacaad.org.cn/index.php?a=2&t=1&page= "& pg & "&"
    web.Navigate( wz )
    Do Until web.ReadyState = 4
        Application.DoEvents
    Loop

    Dim elems As object = web.Document.GetElementById("table1").GetElementsByTagName("tr")
    Dim m As Integer = 0
    Dim r As Integer = 0
    For Each elem As object In elems
        r = r + 1
        If r = elems.count Then
            Exit For
        End If
        Dim i As Integer = -1
        m = m + 1
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        If m > 1 Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
                Tables("AD").AddNew
        End If
        For Each tdelem As object In tdelems
            i = i+1
            If i < 3 Then
                Tables("AD").Current(Cols(i)) = tdelems(i).Innertext
            ElseIf i = 3 Then
                Tables("AD").Current(Cols(i)) = tdelems(5).Innertext                            
            ElseIf i = 4 Then
                Tables("AD").Current(Cols(i)) = Date.Today
                Exit For
            End If            
        Next
        With Tables("AD")
            If Tables("AD").Current(Cols(0)) Like "???####A320" Then
            Else
              .Current.Delete()
            End If
        End With
    Next 
Next
Tables("AD").save
'

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/11 23:27:00 [显示全部帖子]

而且,因为涉及下载pdf,我想先做判断,再取数据。例如 如果适航指令编号列包含A320,那么下载附件(下载数据这块我先自行研究,不麻烦老师们呢),读取数据,这样可以避免取数后再删除的操作。

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/12 20:56:00 [显示全部帖子]

是的,是这个意思,但这样写不行,程序会报错。

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/28 15:02:00 [显示全部帖子]

以下是引用有点蓝在2019/3/12 21:36:00的发言:
什么错?
有点蓝老师,弹出 “未将对象引用设置到对象的实例”,实例我已经上传了,麻烦帮忙看看,谢谢了。


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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/28 23:13:00 [显示全部帖子]

以下是引用有点甜在2019/3/28 15:09:00的发言:

 

请上传正确的,对应的实例测试。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:网页数据读取--ad.table

各位老师,已上传


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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/31 14:16:00 [显示全部帖子]

我就是点击获取数据,然后就弹出窗口,
图片点击可在新窗口打开查看此主题相关图片如下:问题弹窗.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/4/1 22:41:00 [显示全部帖子]

以下是引用有点甜在2019/4/1 11:08:00的发言:

你上传的例子,我测试,没问题

 不好意思啊,我上传的例子里注释掉了一段代码

        With Tables("AD")

            'If Tables("AD").Current(Cols(0)) Like "*A320" Then

            'Else

              '.Current.Delete()

            'End If

        End With

取消注释后,就会报错了

下载信息  [文件大小:344.0 KB  下载次数:1]
图片点击可在新窗口打开查看点击浏览该文件:网页数据读取--ad.table


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


加好友 发短信
等级:童狐 帖子:236 积分:2095 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/4/3 9:58:00 [显示全部帖子]

各位老师,我现在增加了新的功能,在导入时识别重复值,如果是重复的不再录入,但总是报错,调试了下,问题就出现在:Dim zl As String = tdelems(0).Innertext这句代码上,提示:“0”的值对于“index”无效。“index”应介于 0 和 -1 之间。下面附一下全部代码

参数名: index
Dim web As New System.Windows.Forms.WebBrowser()
Dim Cols() As String = { "指令编号","修正案号","标题","生效日期"}
Dim dr As DataRow
For pg As Integer = e.Form.Controls("textbox1").Value To e.Form.Controls("textbox2").Value
'Dim pg As Integer = 1
    Dim wz As String = "http://www.caacaad.org.cn/index.php?a=2&t=1&page= "& pg & "&"
    web.Navigate( wz )
    Do Until web.ReadyState = 4
        Application.DoEvents
    Loop

    Dim elems As object = web.Document.GetElementById("table1").GetElementsByTagName("tr")
    Dim m As Integer = 0
    Dim r As Integer = 0
    For Each elem As object In elems
        r = r + 1
        If r = elems.count Then
            Exit For
        End If
        Dim i As Integer = -1
        m = m + 1
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        Dim zl As String = tdelems(0).Innertext
        If m > 1 Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
            If tdelems(0).Innertext Like "*A320*" Or tdelems(0).Innertext Like "*A330*" Or tdelems(0).Innertext Like "*MULT*" Or tdelems(0).Innertext Like "*B737*" Then
                dr = DataTables("AD监控").Find("指令编号 ='"& zl &"'")
                If dr Is Nothing Then
                    Tables("AD监控").AddNew
                    For Each tdelem As object In tdelems
                        i = i+1
                        If i < 3 Then
                            Tables("AD监控").Current(Cols(i)) = tdelems(i).Innertext
                        ElseIf i = 3 Then
                            Tables("AD监控").Current(Cols(i)) = tdelems(5).Innertext
                            Exit For
                        End If
                    Next
                End If
            End If
        End If
    Next
Next
Tables("AD监控").save

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