Foxtable(狐表)用户栏目专家坐堂 → 这种网页数据如何抓取数据


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

主题:这种网页数据如何抓取数据

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/9/26 17:55:00 [只看该作者]

蓝老师我把代码发上来你帮我测试一下,先谢谢了

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True '解决网页页面的脚本错误提示
web.Navigate("https://ggzy.zj.gov.cn/col/col1229682666/index.html?number=ggjyA02")

Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("7795744") IsNot Nothing
    Application.DoEvents '绘制控件的代码即刻生效
Loop
Dim elems As Object
elems = web.Document.GetElementById("7795744").GetElementsByTagName("div") '可以根据你指定的参数,找出

For Each elem As System.Windows.Forms.HtmlElement In elems
    
    If elem.getattribute("classname") = "fyxx_lsbox_r" Then
        'msgBox(elem.Children(0).getattribute("title"))        '这个有值
        'msgBox(elem.Children(1).getattribute("herf"))        '这个为空,没有数据
        msgBox(elem.innerHtml)

    End If
Next

[此贴子已经被作者于2023/9/27 9:53:12编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  62楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/9/26 20:42:00 [只看该作者]

msgBox(elem.Children(0).getattribute("href"))    

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/9/26 22:06:00 [只看该作者]

这个在51楼时已测过了,没用,弹出是空值啊
[此贴子已经被作者于2023/9/27 9:56:52编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  64楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/9/26 22:12:00 [只看该作者]

不一样,认真看看红色字呗

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/22 21:09:00 [只看该作者]

老师下面代码出错,主要是想得到GetElementById("zoom")后面的dom结构
Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True   '解决网页页面的脚本错误提示
'web.Navigate(blwz)
web.Navigate("http://ztb.ggzy.zj.gov.cn/art/2023/6/15/art_1229682666_215031.html")
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("zoom") IsNot Nothing    '用ID确定属性内容
    Application.DoEvents   '绘制控件的代码即刻生效
Loop
'''----------
Dim elems As object
elems = web.Document.GetElementById("zoom").GetElementsByTagName("div")  '可以根据你指定的参数,找出html源码中或xml内所有标签名称等于该参数的元素
Dim s   = web.Document.GetElementById("zoom").querySelector("div").lastChild.nodeName
Output.Show(s)

 回到顶部
帅哥,在线噢!
有点蓝
  66楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/22 21:20:00 [只看该作者]

报什么错误?

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/22 21:25:00 [只看该作者]




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


 回到顶部
帅哥,在线噢!
有点蓝
  68楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/22 21:49:00 [只看该作者]

querySelector是js的功能,不是vb.net的东西。可用属性和方法都在这了:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.forms.htmlelement?view=netframework-4.0

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/26 11:15:00 [只看该作者]

老师下面代码经常会出现:内存不够或系统资源出错等等
需求:
1、下面代码是否有不合理地方。 
2、0 To 100 改为 0 To 50 如何让代码等待5分钟,让电脑释放内存,再执行代码

Dim drs As List(Of DataRow) = DataTables("原始网址1").Select("开标网址 Is Not Null And 备注 Is Null")
For m As Integer = 0 To 100
    Dim web As New System.Windows.Forms.WebBrowser()
    web.ScriptErrorsSuppressed = True   '解决网页页面的脚本错误提示
    web.Navigate(drs(m)("开标网址"))
    Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("zoom") IsNot Nothing
        Application.DoEvents   '绘制控件的代码即刻生效
    Loop
    Dim elems As object
    Dim txt As String = ""
    Dim bdtxt As String = ""       ''表单
    '''****-----------开标信息----------
    elems = web.Document.GetElementById("zoom").GetElementsByTagName("p")   '以P为大节点划分
    If elems.Count > 0 Then
        For n As Integer = 0 To elems.Count - 1
            If elems(n) IsNot Nothing AndAlso elems(n).InnerText IsNot Nothing  AndAlso elems(n).InnerText.Trim() > "" Then
                txt &= elems(n).InnerText & vbCrlf
                'Else
                'msgbox("PDF")
            End If
        Next
    End If
    
    'elems = web.Document.GetElementById("zoom").GetElementsByTagName("tbody")   '找出最大"tbody"的ne值
    Dim ne As Integer = web.Document.GetElementById("zoom").GetElementsByTagName("tbody").Count -1    '找出最大"tbody"的ne值
    If ne >= 0 Then
        elems = web.Document.GetElementById("zoom").GetElementsByTagName("tbody")(ne).GetElementsByTagName("tr")  '找出最大"tbody"的ne值,下面的tr或td
        Dim th As Integer
        For i As Integer = 0 To elems.Count -1
            If elems(i).Innertext.Contains("序号") Then               '查出包含有"序号"的行作分界线
                th = i
                'msgbox("序号 = " & i)
            End If
            Dim tds As object = elems(i).GetElementsByTagName("td")
            For ii As Integer  = 0 To tds.Count -1
                If tds.Count >= 2 Then                      '开标记录表单,根据td列数量来区分开标记录与标段名称等
                    bdtxt &= tds(ii).InnerText & vbCrlf
                Else
                    txt &= tds(ii).InnerText & vbCrlf       '标段名称等
                End If
            Next
        Next
    End If
    drs(m)("备注") = StrToNarrow(txt)
    drs(m)("备注1") = bdtxt
Next

 回到顶部
帅哥,在线噢!
有点蓝
  70楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/26 11:43:00 [只看该作者]

……
    End If
    drs(m)("备注") = StrToNarrow(txt)
    drs(m)("备注1") = bdtxt
web.Dispose
Threading.Thread.Sleep(1000)
Next

 回到顶部
总数 72 上一页 1 2 3 4 5 6 7 8 下一页