以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求助:今日头条解析到数据表,结果运行出错,求解! (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92339) |
||||
-- 作者:李孝春 -- 发布时间:2016/11/1 10:41:00 -- 求助:今日头条解析到数据表,结果运行出错,求解! 运行错误如下: 项目实例如下:
按钮代码如下: Dim web As new System.Windows.Forms.WebBrowser web.ScriptErrorsSuppressed = True \'web.Navigate("http://toutiao.com/m6114233861/") Dim ad As WinForm.ComboBox = e.Form.Controls("ComboBox2") web.Navigate(ad.Value) Do Until web.ReadyState = 4 Application.DoEvents Loop Dim pg = web.Document.GetElementById("pagebar").GetElementsByTagName("a") Dim mpg As Integer = 1 If pg.count > 1 Then mpg = pg(pg.count-2).Innertext End If DataTables("文章列表").DataRows.Clear For i As Integer = 1 To mpg web.Navigate( ad.text & "/p" & i) \'web.Navigate("http://toutiao.com/m6114233861/p" & i) Do Until web.ReadyState = 4 Application.DoEvents Loop Dim divs = web.Document.GetElementById("ColumnContainer") For Each div As object In divs.GetElementsByTagName("div") If div.GetAttribute("ClassName") = "pin" Then Dim tbs = div.GetElementsByTagName("table") Dim trs = tbs(0).GetElementsByTagName("tr") \'output.show(trs(0).GetElementsByTagName("h3")(0).Innertext) \'文章标题 \'output.show(trs(0).GetElementsByTagName("a")(0).GetAttribute("href")) \'文章标题 \'output.show(trs(1).GetElementsByTagName("div")(1).Innertext) \'正文 Dim tds = trs(2).GetElementsByTagName("td") \'output.show(tds(1).innertext) \'阅读数 \'output.show(tds(2).innertext) \'评论数 \'output.show(tds(3).innertext) \'发布时间 \'output.show("------") Dim dr As DataRow = DataTables("文章列表").AddNew() Dim 阅读数 As String = tds(1).innertext Dim Parts() As String = 阅读数.Split(":") Dim 评论数 As String = tds(2).innertext Dim Parts1() As String = 评论数.Split(":") Dim bt As System.Windows.Forms.HtmlElement bt = web.Document.GetElementByID("keywords") \'今日头条单位标题 \'Output.Show(bt.innerText & " " & bt.GetAttribute("content")) dr("单位") = bt.innerText & " " & bt.GetAttribute("content") \'msgbox(bt.innerText & " " & bt.GetAttribute("content")) dr("文章标题") = trs(0).GetElementsByTagName("h3")(0).Innertext dr("发布时间") = tds(3).innertext dr("阅读数") = Parts(1) dr("评论数") = Parts1(1) dr("正文") = trs(1).GetElementsByTagName("div")(1).Innertext dr("网址") = trs(0).GetElementsByTagName("a")(0).GetAttribute("href") End If Next Next [此贴子已经被作者于2016/11/1 10:41:52编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2016/11/1 11:14:00 -- 所有使用GetElementById、GetElementsByTagName的地方都判断一下 Dim pg = web.Document.GetElementById("pagebar").GetElementsByTagName("a") 改为 dim e1 = web.Document.GetElementById("pagebar") if e1 isnot nothing then
dim pg = e1.GetElementsByTagName("a")
if pg.count > 0 then
\'其它代码
endif end if |
||||
-- 作者:李孝春 -- 发布时间:2016/11/1 11:46:00 -- 回复:(有点蓝)所有使用GetElementById、GetElement... 不抱错 但是也没数据 Dim web As new System.Windows.Forms.WebBrowser web.ScriptErrorsSuppressed = True web.Navigate("http://toutiao.com/m6114233861/") Do Until web.ReadyState = 4 Application.DoEvents Loop Dim e1 = web.Document.GetElementById("pagebar") If e1 IsNot Nothing Then Dim pg = e1.GetElementsByTagName("a") If pg.count > 0 Then Dim mpg As Integer = 1 If pg.count > 1 Then mpg = pg(pg.count-2).Innertext End If For i As Integer = 1 To mpg web.Navigate("http://toutiao.com/m6114233861/p" & i) Do Until web.ReadyState = 4 Application.DoEvents Loop Dim divs = web.Document.GetElementById("ColumnContainer") For Each div As object In divs.GetElementsByTagName("div") If div.GetAttribute("ClassName") = "pin" Then Dim tbs = div.GetElementsByTagName("table") Dim trs = tbs(0).GetElementsByTagName("tr") output.show(trs(0).GetElementsByTagName("h3")(0).Innertext) \'文章标题 output.show(trs(0).GetElementsByTagName("a")(0).GetAttribute("href")) \'文章标题 output.show(trs(1).GetElementsByTagName("div")(1).Innertext) \'正文 Dim tds = trs(2).GetElementsByTagName("td") output.show(tds(1).innertext) \'阅读数 output.show(tds(2).innertext) \'评论数 output.show(tds(3).innertext) \'发布时间 output.show("------") End If Next Next End If End If |
||||
-- 作者:有点蓝 -- 发布时间:2016/11/1 12:07:00 -- 说明页面没有对应的标签,请求出错或其他原因返回的不是你想要的页面 自己输出内容分析, Dim web As new System.Windows.Forms.WebBrowser web.ScriptErrorsSuppressed = True web.Navigate("http://toutiao.com/m6114233861/") Do Until web.ReadyState = 4 Application.DoEvents Loop Output.Show(web.Document.Body.InnerHtml)
|
||||
-- 作者:有点青 -- 发布时间:2016/11/1 12:57:00 -- 你这种方法无效了,人家用动态加载了,每次加载10行数据。
下面的方法也只能获取到10行。
Dim web As new System.Windows.Forms.WebBrowser Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("content-left") IsNot Nothing AndAlso web.Document.GetElementById("content-left").GetElementsByTagName("li").count > 0 |
||||
-- 作者:有点青 -- 发布时间:2016/11/1 13:08:00 -- 你可以用手动的方式。放一个webbrowser控件,显示页面,然后滚动到最后(每次加载10行),直到加载完毕,你再用代码获取这个页面的数据。 |
||||
-- 作者:李孝春 -- 发布时间:2016/11/1 13:30:00 -- 回复:(有点蓝)说明页面没有对应的标签,请求出错或... Dim web As new windows.forms.webbrowser web.Navigate("http://toutiao.com/m6051259851/") Do Until web.ReadyState = 4 Application.DoEvents Loop Dim getReader = new System.IO.StreamReader(web.DocumentStream, Encoding.Default) Dim str = getReader.ReadToEnd() \'output.show(str) Dim bt As System.Windows.Forms.HtmlElement bt = web.Document.GetElementByID("keywords") \'今日头条单位标题 Dim bt1 As System.Windows.Forms.HtmlElement bt1 = web.Document.GetElementByID("description") Output.Show(bt.innerText & " " & bt.GetAttribute("content")) ‘输出结果:瓮安县人民检察院 Output.Show(bt1.innerText & " " & bt1.GetAttribute("content")) ‘输出结果: 瓮安县人民检察院头条号,带您了解详尽的行业资讯.瓮安县人民检察院深度分析,专业见解.你关心的,才是头条.阅读瓮安县人民检察院最新文章,就在头条号. Dim divs = web.Document.GetElementById("media-header") For Each div As object In divs.GetElementsByTagName("div") If div.GetAttribute("Class") = "rbox-inner" Then Dim tbs = div.GetElementsByTagName("title-box link") Dim trs = tbs(0).GetElementsByTagName("title-box link") output.show(tbs(0).GetElementsByTagName("href")(0).Innertext) \' output.show(trs(1).GetElementsByTagName("abstract")(1).Innertext) \' End If Next 下面是输出结果: 瓮安县人民检察院 瓮安县人民检察院头条号,带您了解详尽的行业资讯.瓮安县人民检察院深度分析,专业见解.你关心的,才是头条.阅读瓮安县人民检察院最新文章,就在头条号. 更多的文章标题 地址 阅读数 评论数 发布时间 文章简介却操作不出来 |
||||
-- 作者:李孝春 -- 发布时间:2016/11/1 13:46:00 -- 回复:(有点青) 你可以用手动的方式。放一个we... 有没有办法直接获取指定行数的数据呢? 比如每次加载十行 那么我指定每次加载的行数 或者按照之前的页数方式 加载全部页数 加载全部行数来操作呢? |
||||
-- 作者:李孝春 -- 发布时间:2016/11/1 14:01:00 -- 回复:(有点青) 你可以用手动的方式。放一个we... 参照写,报错如下: Dim web As new System.Windows.Forms.WebBrowser web.ScriptErrorsSuppressed = True web.Navigate("http://toutiao.com/m6051259851/") Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("content-left") IsNot Nothing AndAlso web.Document.GetElementById("content-left").GetElementsByTagName("li").count > 0 Application.DoEvents Loop Dim lis = web.Document.GetElementById("content-left").GetElementsByTagName("li") For i As Integer = 0 To lis.count-1 Dim lsa = lis(i).GetElementsByTagName("a") output.show(lsa(0).InnerHtml) Dim lsp = lis(i).GetElementsByTagName("p") output.show(lsp(1).InnerHtml) Dim lspSPAN = lis(i).GetElementsByTagName("SPAN") output.show(lspSPAN(2).InnerHtml) Dim lsphref = lis(i).GetElementsByTagName("href") output.show(lsphref(0).InnerHtml) Next
|
||||
-- 作者:李孝春 -- 发布时间:2016/11/1 14:11:00 -- 回复:(有点青)你这种方法无效了,人家用动态加载了... 如果需要加载A标签下 class="title-box link" 这个的值 怎么代码中加上呢? Dim web As new System.Windows.Forms.WebBrowser Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("content-left") IsNot Nothing AndAlso web.Document.GetElementById("content-left").GetElementsByTagName("li").count > 0 |