以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  【求助】如何获取今日头条中的所有页面的网页代码,然后读取文章标题、阅读数、评论数、发布时间到对应的表格中保存  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84510)

--  作者:李孝春
--  发布时间:2016/5/4 9:56: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)

下面是执行上述代码后得到网页源代码文件中的几段关键部分:
<DIV class=pin-content group_id="6275912267754275074" data-type="context">
<TABLE width=680>
  <TBODY>
  <TR>
    <TD height=35>
      <H3><A onclick=action_log(this) 
      href="http://toutiao.com/item/6275915046082052609/" target=_blank  文章在今日头条中的地址
      ga_label="index_feed" 
    ga_event="source_url">全州检察政治工作暨检察官文联筹备会在瓮安召开</A></H3></TD></TR>      文章标题
  <TR>
    <TD>
      <DIV class=list_image>
      <UL>
        <LI class="img_bg shadow_img"><A onclick=action_log(this) 
        href="http://toutiao.com/item/6275915046082052609/" target=_blank    文章在今日头条中的地址
        ga_label="index_feed" ga_event="source_url"><IMG 
        onerror=errorimg.call(this) 
        src="http://p2.pstatp.com/list/5680000b06831514612"></A> </LI>
        <LI class="img_bg shadow_img"><A onclick=action_log(this) 
        href="http://toutiao.com/item/6275915046082052609/" target=_blank 
        ga_label="index_feed" ga_event="source_url"><IMG 
        onerror=errorimg.call(this) 
        src="http://p2.pstatp.com/list/5690008f7f4463406b1"></A> </LI>
        <LI class="img_bg shadow_img"><A onclick=action_log(this) 
        href="http://toutiao.com/item/6275915046082052609/" target=_blank 
        ga_label="index_feed" ga_event="source_url"><IMG 
        onerror=errorimg.call(this) 
        src="http://p2.pstatp.com/list/56a0008d02e19a3e7a5"></A> </LI></UL></DIV>    文章中的插图
      <DIV 
      class=text>4月20日,全州检察政治工作暨检察官文联筹备会在瓮安县检察院召开。州检察院党组成员、副检察长潘凤敏,州院党组成员、政治部主任刘雪红,《法治生活报》专题部主任罗翔,州院政治部全体成员,各县、市检察院分管领导和政工同志参加会议。会议由州院政治部宣传科科长黄永荣主持。</DIV>
      <DIV class=clearfix></DIV></TD></TR>
  <TR>
    <TD>
      <TABLE class=item_info width="100%">
        <TBODY>
        <TR>
          <TD>阅读: 516</TD>                                         文章的阅读数、评论数、发布时间
          <TD>评论: 0</TD>
          <TD align=right>2016-04-21 15:47

</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV></DIV></DIV>


经过观察,今日头条会每页显示20条信息,多余的按页显示
下面是按页代码
<DIV id=pagebar class=pagebar><A class="pagebar_step  pagebar_step_current " 
href="http://toutiao.com/m6051259851/">1</A> <A class="pagebar_step " 
href="http://toutiao.com/m6051259851/p2/">2</A> <A class="pagebar_step " 
href="http://toutiao.com/m6051259851/p3/">3</A> <A class="pagebar_step " 
href="http://toutiao.com/m6051259851/p4/">4</A> <A class="pagebar_step " 
href="http://toutiao.com/m6051259851/p5/">5</A> <A class="pagebar_step " 
href="http://toutiao.com/m6051259851/p6/">6</A> <A 
class="pagebar_turn pagebar_turn_next" 
href="http://toutiao.com/m6051259851/p2/">下一页</A> </DIV></DIV>
如何利用代码来实现,将上述数组中所有的文章信息全部获取呢?

--  作者:大红袍
--  发布时间:2016/5/4 10:02:00
--  

Dim web As new System.Windows.Forms.WebBrowser
web.Navigate("http://toutiao.com/m6051259851/")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim pg = web.Document.GetElementById("pagebar")
For Each a As object In pg.GetElementsByTagName("a")
    msgbox(a.innerText & " " & a.GetAttribute("href"))
Next


--  作者:大红袍
--  发布时间:2016/5/4 10:03:00
--  
 请自己去学习一下如何获取html里面元素的内容。
--  作者:李孝春
--  发布时间:2016/5/11 16:51:00
--  回复:(大红袍) 请自己去学习一下如何获取html...
正则表达式弄了许久都没有搞定 越搞越乱咯
 下面是网页源代码:

<div class="pin">

<a class="close" href="#" group_id="6230520256486441473" title="不感兴趣"></a>

<div class="pin-content" data-type="context" group_id="6230520256486441473">

<table width="680">

<tr>

<td height="35">

<h3>                                                                                            

<a href="http://toutiao.com/item/6283004838989005313/" target="_blank" ga_event="source_url" ga_label="index_feed" >关注|“司法考试”将更名为“法律职业资格考试”考试难度有所上升</a></h3>

</td>

</tr>

<tr>

<td>

<div style="float:left; max-height:180px; overflow:hidden; margin-right:10px"  class="img_bg shadow_img">

<a target="_blank" href="http://toutiao.com/item/6283004838989005313/"    ga_event="source_url" ga_label="index_feed"><img src="http://p2.pstatp.com/list/5c40008f9d353ab6875" width="202" />

</a>

</div>

<div class="text">2016-05-09 贵州检察来源 | 山东省人民检察院微信公众号“司法考试”更名为“法律职业资格考试”的法治意义“司法考试”将更名为“法律职业资格考试” 标志着法律职业共同体的真正形成一、“司法考试制度”到“国家统一法律职业资格考试制度”,标志法律职业共同体将真正形成中共中央办</div>

<div class="clearfix"></div>

</td>

</tr>

<tr>

<td>

<table class="item_info" width="100%">

<tr>

<td>阅读: 194</td>

<td>评论: 0</td>

<td align="right">2016-05-10 16:46</td>

</tr>

</table>

</td>

</tr>

</table>

</div>

</div>


经过在命令窗口中运行如下:

Dim web As new System.Windows.Forms.WebBrowser

web.Navigate("http://toutiao.com/m6051259851/")

Do Until web.ReadyState = 4

    Application.DoEvents

Loop


Dim bt As System.Windows.Forms.HtmlElement

bt = web.Document.GetElementByID("keywords")   \'今日头条单位标题

Output.Show(bt.innerText & " " & bt.GetAttribute("content"))


Dim jj As System.Windows.Forms.HtmlElement

jj = web.Document.GetElementByID("description")   \'今日头条单位简介

Output.Show(jj.innerText & " " & jj.GetAttribute("content"))


Dim bt1 As System.Windows.Forms.HtmlElement

bt1 = web.Document.GetElementByID("pin-content")   \'

Output.Show(bt1.innerText & " " & bt1.GetAttribute("href"))    这个部分的代码不起作用  是不是ID元素错误啦


运行报错


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


求解决错误

并获取下列红色框中数据


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




--  作者:大红袍
--  发布时间:2016/5/11 17:25:00
--  

参考

 

Dim web As new System.Windows.Forms.WebBrowser
web.ScriptErrorsSuppressed = True
web.Navigate("http://toutiao.com/m6051259851/")
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(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


--  作者:李孝春
--  发布时间:2016/5/11 18:57:00
--  回复:(大红袍)参考?Dim web As new Syste...
试问又如何实现7个页面的全部数据读取?


[此贴子已经被作者于2016/5/11 19:15:39编辑过]

--  作者:大红袍
--  发布时间:2016/5/11 19:29:00
--  
看2楼,结合5楼,换一下地址就行啊。
--  作者:李孝春
--  发布时间:2016/5/11 19:45:00
--  回复:(大红袍)看2楼,结合5楼,换一下地址就行啊。...
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


在按钮事件代码中写入如下代码:
Dim web As new System.Windows.Forms.WebBrowser
web.ScriptErrorsSuppressed = True
\'Dim ad As WinForm.ComboBox = e.Form.Controls("ComboBox2")
\'web.Navigate(ad.Value)
web.Navigate("http://toutiao.com/m6051259851/")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop
DataTables("文章列表").DataRows.Clear

Dim bt As System.Windows.Forms.HtmlElement
bt = web.Document.GetElementByID("keywords")   \'今日头条单位标题
Output.Show(bt.innerText & " " & bt.GetAttribute("content"))

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(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(":")
        
        dr("单位") = 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("网址") = 
        \'Next
    End If
Next

现在已经可以实现第一页的数据对应的填入到文章列表这个表中,但是第二页、第三页、第四页怎么操作呢?

我想实现的是 就在这个代码中实现1到N页的所有列表数据的获取

另外:当前文章对应的网址部分的值 还得麻烦大红袍老师指导一下  怎么获取 谢谢!
[此贴子已经被作者于2016/5/11 19:47:52编辑过]

--  作者:大红袍
--  发布时间:2016/5/11 20:00:00
--  

Dim web As new System.Windows.Forms.WebBrowser
web.ScriptErrorsSuppressed = True
web.Navigate("http://toutiao.com/m6051259851/")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim pg = web.Document.GetElementById("pagebar").GetElementsByTagName("a")
Dim mpg As Integer = pg(pg.count-2).Innertext

DataTables("文章列表").DataRows.Clear

For i As Integer = 1 To mpg
    web.Navigate("http://toutiao.com/m6051259851/p" & i)
    Do Until web.ReadyState = 4
        Application.DoEvents
    Loop
    Dim bt As System.Windows.Forms.HtmlElement
    bt = web.Document.GetElementByID("keywords")   \'今日头条单位标题
    Output.Show(bt.innerText & " " & bt.GetAttribute("content"))
   
   
    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(":")
           
            dr("单位") = 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/5/11 21:06:00
--  回复:(大红袍)Dim web As new System.Windows.Form...
好奇怪的问题 居然一样的操作 有三都 福泉 平塘的不能读取数据  错误如下 三个都一样
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


图片点击可在新窗口打开查看此主题相关图片如下:89cb.tm.png
图片点击可在新窗口打开查看
 大红袍老师 求教
[此贴子已经被作者于2016/5/11 21:09:22编辑过]