Foxtable(狐表)用户栏目项目发布 → 百度百科——内容如何提取


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

主题:百度百科——内容如何提取

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


加好友 发短信
等级:幼狐 帖子:125 积分:1609 威望:0 精华:0 注册:2016/9/8 13:33:00
百度百科——内容如何提取  发帖心情 Post By:2018/5/15 21:50:00 [显示全部帖子]

 最近想通过webbrowser,来对数据表中的中药名称,进行批量的百度百科内容提取,现在发现webbrowser 不能进行getelementsbyclassname ,而只有通过getelementsbyid 或是 getelementsbytagname 等方法,发现很难做到,不知道有何更好的方法可以采用,本打算自己构建类似方法,发现webbrowser不支持的太多,最终也没能实现,特开贴大家共同研究一下,解决方法。

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


加好友 发短信
等级:幼狐 帖子:125 积分:1609 威望:0 精华:0 注册:2016/9/8 13:33:00
  发帖心情 Post By:2018/5/15 22:37:00 [显示全部帖子]

 Dim str As String = "https://baike.baidu.com/item/%E5%B7%9D%E8%B4%9D%E6%9E%87%E6%9D%B7%E7%B3%96%E6%B5%86"
Dim classname As String ="main-content"  ' "main-content"

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate(str )
web.ScriptErrorsSuppressed = True  ''过滤脚本错误

Do Until web.ReadyState = 4  '''等待获取网页数据结束
    Application.DoEvents
Loop

Dim elemts  = web.Document.GetElementsByTagName("body")(0).GetElementsByTagName("div")  '获取body中的div元素
Dim data As String = web.Document.Body.Innerhtml 'Text
'If data.Contains(classname ) Then msgbox("存在" & classname )

'''计算内容页 div的位置
Dim ii,iii As Integer
ii =data.IndexOf(classname )
Dim data2 As String = data.SubString(0,ii)
iii = (data2.Length-data2.Replace("<DIV" ,"").Length)/4
'''输出内容
output.show(elemts(iii-1)  .Innertext)
[此贴子已经被作者于2018/5/15 22:38:54编辑过]

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


加好友 发短信
等级:幼狐 帖子:125 积分:1609 威望:0 精华:0 注册:2016/9/8 13:33:00
  发帖心情 Post By:2018/5/15 22:45:00 [显示全部帖子]

'''引用 大红袍 的代码,发现更加简单,原来属性的classname 可以用 GetAttribute 获得,收益匪浅

Dim str As String ="https://baike.baidu.com/item/平车前"
'Dim str As String = "https://baike.baidu.com/item/%E5%B9%B3%E8%BD%A6%E5%89%8D"

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate(str )
web.ScriptErrorsSuppressed = True  ''过滤脚本错误

Do Until web.ReadyState = 4  '''等待获取网页数据结束
    Application.DoEvents
Loop

Dim lis As System.Windows.Forms.HtmlElementCollection = web.Document.GetElementsByTagName("div") '获得当前页面的A标签HTML元素集合
Dim count As Integer = 0
For Each li As object In lis
    If li.GetAttribute("ClassName") = "main-content" Then
msgbox("找到类名为 main-content 的类")
output.show(li.Innertext)
        'count += 1
        'If count = 4 Then
            'li.GetElementsByTagName("a")(0).InvokeMember("Click") '执行该标签的点击方法,实现
        'End If
    End If
Next


 回到顶部