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


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

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

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


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/21 14:46:00 [只看该作者]

ndr = Tables("招标公告").AddNew()
        ndr("名称") = tds(0).innerText
        ndr("内容") = tds(1).innerText
ndr = Tables("招标公告").AddNew()
        ndr("名称") = tds(2).innerText
        ndr("内容") = tds(3).innerText

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


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

还是不对,下面这段代码如何调整?绿色框中的数据如何导入?

Dim web As New System.Windows.Forms.WebBrowser()
web.scripterrorssuppressed = True
web.Navigate("http://www.hzctc.cn/AfficheShow/Home?AfficheID=7d220975-619a-41e9-9142-aadf97d346fe&IsInner=0&ModuleID=22")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop
Dim elems As object = web.Document.GetElementsByTagName("table")(0).GetElementsByTagName("tr")
Dim ndr As Row
For Each elem As object In elems
    Dim tds = elem.GetElementsByTagName("td")
    ndr = Tables("招标公告").AddNew()
    'If tds.Count > 0  AndAlso tds.Count < 3
        'msgbox(tds(0).innerText & ":" & tds(1).innerText)
        ndr("名称") = tds(0).innerText
        ndr("内容") = tds(1).innerText
    'End If
    'If tds.Count > 3  AndAlso tds.Count < 5
        ''msgbox(tds(0).innerText & ":" & tds(1).innerText & ",," & tds(2).innerText & ":" & tds(3).innerText)
        'ndr("名称") = tds(0).innerText
        'ndr("内容") = tds(1).innerText
        'ndr("名称") = tds(2).innerText
        'ndr("内容") = tds(3).innerText
    'End If
Next


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

[此贴子已经被作者于2019/2/21 15:23:42编辑过]

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


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/21 16:08:00 [只看该作者]

不要循环了,用笨方法。这个没有什么规律,只能这样,网页分析就是这样,别人的格式改一下,你就得改代码,不然就容易出错

Dim elems As object = web.Document.GetElementsByTagName("table")(0).GetElementsByTagName("tr")
Dim ndr As Row
Dim tds = elem(0).GetElementsByTagName("td")
ndr = Tables("招标公告").AddNew()
ndr("名称") = tds(0).innerText
ndr("内容") = tds(1).innerText
tds = elem(1).GetElementsByTagName("td")
ndr = Tables("招标公告").AddNew()
ndr("名称") = tds(0).innerText
ndr("内容") = tds(1).innerText
tds = elem(2).GetElementsByTagName("td")
ndr = Tables("招标公告").AddNew()
ndr("名称") = tds(0).innerText
ndr("内容") = tds(1).innerText
ndr = Tables("招标公告").AddNew()
ndr("名称") = tds(2).innerText
ndr("内容") = tds(3).innerText

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


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

终于解决!

Dim web As New System.Windows.Forms.WebBrowser()
web.scripterrorssuppressed = True
web.Navigate("http://www.hzctc.cn/AfficheShow/Home?AfficheID=8aa69acf-37e7-4500-b427-25925d1c4b54&IsInner=0&ModuleID=22")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop
For n As Integer = 0 To 1
    Dim elems As object = web.Document.GetElementsByTagName("table")(n).GetElementsByTagName("tr")
    Dim ndr As Row
    For Each elem As object In elems
        Dim tds = elem.GetElementsByTagName("td")
        If tds.Count > 0  AndAlso tds.Count < 3
            ndr = Tables("招标公告").AddNew()
            ndr("名称") = tds(0).innerText
            ndr("内容") = tds(1).innerText
        End If
        If tds.Count > 3  AndAlso tds.Count < 5
            ndr = Tables("招标公告").AddNew()
            ndr("名称") = tds(0).innerText
            ndr("内容") = tds(1).innerText
            ndr = Tables("招标公告").AddNew()
            ndr("名称") = tds(2).innerText
            ndr("内容") = tds(3).innerText
        End If
    Next
Next

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


加好友 发短信
等级:幼狐 帖子:130 积分:1004 威望:0 精华:0 注册:2019/3/10 1:12:00
  发帖心情 Post By:2021/4/9 11:54:00 [只看该作者]

mark一下

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


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

下面这段代码在数据50行内加入没有问题,但数据达到1500行就不行了,哪里出错了,请老师指点,先谢谢了
因代码太长了,上传不了详附件

https://ggzy.hzctc.hangzhou.gov.cn/OpenBidRecord/Index?id=B080CE38-6C93-4EB9-8E81-7AC4096437A0&tenderID=E8F0BF5F-5B2D-43D4-A6A3-84DF06285C05&IsHistory=0&ModuleID=486


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码.zip




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


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

分析网页抓数据的用法请自行研究解决,这里不再提供这方面的技术支持

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


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

如何分别导出绿色标注的元素,到数据表中工程名称列和网址列?


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

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") '可以根据你指定的参数,找出
'msgBox(elems.count)
For Each elem As Object In elems
    If elem.getattribute("classname") = "fyxx_lsbox_r" Then
        msgBox(elem.innertext)
    End If 
Next
[此贴子已经被作者于2023/9/23 23:40:23编辑过]

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


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

For Each elem As System.Windows.Forms.HtmlElement In elems
    If elem.getattribute("classname") = "fyxx_lsbox_r" Then
        msgBox(elem.Children(0).getattribute("title"))
    End If 
Next

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


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

为什么  herf  后面的网址读取不了,是空值

For Each elem As System.Windows.Forms.HtmlElement In elems
    If elem.getattribute("classname") = "fyxx_lsbox_r" Then
        msgBox(elem.Children(1).getattribute("herf"))
    End If 
Next
[此贴子已经被作者于2023/9/24 21:22:34编辑过]

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