| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8549 人关注过本帖
标题:求助:这类不能从“查看源码”中直接获取列表值的网页数据如何提取
只看楼主 加入收藏
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
收藏
得分:0 
回复 20楼 aaaaaa
首先感谢您的细心解答。我不我的学习情况给高手们汇报一下:
1、我只是了解一些vfp和vbs的数据处理知识,仅限于已有数据处理,但对web方面的知识了解甚少
2、以前获取网页数据都是通过提取网页源代码然后解析获得数据,但对于此类在源代码中不能直接取得数据的网页就没办法了
3、至于找到那个地址,我是用fiddler工具找到的,而且在里面也看到了直观需要的数据,但是就是不知道如何通过vfp语句截取过来
4、对于版主给出的第一个地址【http://jg.】的数据获取方法,我也认真学习了,也想依葫芦画瓢取得“营业部地址”数据【http://jg.】,但是没有成功,查看网页源代码发现该网页表格数据的引用和纯文本数据的引用是不一样的,看明白了前者是通个“th”,“td”分隔引用,但后者(表格)的引用方式就没有弄明白,无从下手,也百度了很多,业一筹莫展,所以只能向高手求教。

知道这种求人的方式很不妥,业订了一些html,java等相关的书学习,但我知道这是需要一个过程的,而目前的难题只能求助高手了
我的目标是:取得“营业部地址”的数据源码,同时知道换页的方式就行,在vfp里面生成DBF文件我没问题!
请高手再次出手,谢谢
   

[此贴子已经被作者于2016-8-2 10:27编辑过]

2016-08-01 20:25
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
收藏
得分:0 
回复 20楼 aaaaaa
还得请教高手!
昨晚鼓捣到了凌晨1点,本来已经有了结果,而且都生成了表,但是弄着弄着突然不行了!贴上代码,请高手指教
Clear
CREATE CURSOR yyb_xh (xh c(5),yybmc C(80),bgdz C(80),fzr C(8),zcdz c(80),phone1 c(15),e_mail c(20),phone2 c(15))
oIE = Createobject("internetexplorer.application")
oIE.Visible = .T.
cURL = "http://jg.
oIE.Navigate(cURL)
tStartSecond = Seconds()
Do While oIE.Busy = .T. Or oIE.ReadyState#4
    If Seconds() - tStartSecond > 10
        Exit
    Endif
    Inkey(0.5)
Enddo

#Define CRLF Chr(13) + Chr(10)

O1 = oIE.Document.GetElementsByTagName('td')
*?O1.Length
*O2 = oIE.Document.GetElementsByTagName("th")
*cStr = ""
i=21      &&从此处开始取数据
For I1 =1 To 15           &&STEP 8  &&O1.Length - 1  && »ñ衸ÃÔaËØ (cElement) μÄÿ¸öÄúèY
   
    z1=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I).InnerText, "")
    z2=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+1).InnerText, "")
    z3=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+2).InnerText, "")
    z4=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+3).InnerText, "")
    z5=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+4).InnerText, "")
    z6=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+5).InnerText, "")
    z7=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+6).InnerText, "")
   * z8=Iif(Type("O1.Item(I).InnerText") # "U", O1.Item(I+7).InnerText, "")
    i=i+8       &&&每行是8列数据
    INSERT INTO yyb_xh VALUES (z1,z2,z3,z4,z5,z6,z7," ")
   
Endfor
*=Strtofile(cStr, "AAA.txt")
brow
*oIE.Quit()
*Modify File aaa.txt

我测试了,问题原因好像是取不到('td')数据,会不是被网站屏蔽了?

另外就是翻页问题还请一并指教,谢谢!

[此贴子已经被作者于2016-8-2 11:04编辑过]

2016-08-02 11:00
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
这个营业部的网页不要用 td/th 的 tag,改用 Table 的 tag,如果不考虑翻页的,试试看下面的代码:


Public oIE, objTable
oIE = Createobject("Internetexplorer.Application")
oIE.Visible = .T.
oIE.Navigate("http://jg. + "?" + Sys(2015))
tStartSecond = Seconds()
Do While oIE.Busy = .T. Or oIE.ReadyState#4
    If Seconds() - tStartSecond > 10
        Exit
    Endif
Enddo
=Inkey(.5)  && 读取中......

objCollection=oIE.Document.getElementsByTagName("table").[4]

objTable = objCollection

Create Cursor 营业部 (序号 C(4), 营业部名称 C(80), 办公地址 C(100), 营业部负责人 C(8), ;
    注册地址 C(80), 客户服务与投诉电话 C(14), 电子邮件 C(20), 所在地证监局投诉电话 C(14))

For Each objRow In objTable.Rows
    If objRow.cells(0).Innertext > "0"
        Insert Into 营业部 Values ( ;
            objRow.cells(0).Innertext, objRow.cells(1).Innertext, objRow.cells(2).Innertext, ;
            objRow.cells(3).Innertext, objRow.cells(4).Innertext, objRow.cells(5).Innertext, ;
            objRow.cells(6).Innertext, objRow.cells(7).Innertext )
    Endif
Next
oIE.Quit()
Go Top
Browse Last

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-08-02 13:39
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
收藏
得分:0 
完全通过!学习了!寥寥几句,看似简单,但没有真功夫肯定做不出来,“llection=oIE.Document.getElementsByTagName("table").[4]”这一代码就是关键受教了,得好好学习,方能天天向上!!现在就是翻页问题了,通过fiddler能看到这个网页的一些信息,但是就不知道如何通过这些信息来直接转换网页地址。
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-08-02 14:43
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
收藏
得分:0 
愁死了,翻阅了很多网站、论坛,对于翻页的方法有很多,比如在网址里面直接找到页码的,有通过“.Click 模拟点击 [下一页] 的按钮”的,有“oIE.Navigate("javascript:showNextPage()")模拟点击下一页”的,但对该网页都行不通,就是没有找到这种类型网页的翻页方法,还得等待高手出现呀!!
2016-08-03 15:40
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
到EXCEL HOME论坛找找看

坚守VFP最后的阵地
2016-08-03 16:22
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
收藏
得分:0 
终于成功!谢谢6a 谢谢各位
s1="filter_LIKES_msdi_name=&filter_LIKES_msdi_reg_address=&filter_EQS_aoi_id=798&page.searchFileName=publicity&page.sqlKey=PAG_SALES_DEPT;
&page.sqlCKey=SIZE_SALES_DEPT&_search=false&page.pageSize=15&page.pageNo=2&page.orderBy=MATO_UPDATE_DATE&page.order=desc"
oXml = NewObject("Microsoft.XmlHttp")
oXml.open("post", "http://jg., .F.)
oXml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
oXml.send( s1 )
wj_1=oXml.responseText
=Strtofile(wj_1, "yyb.txt")
Modify File yyb.txt
2016-08-03 21:45
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
翻页有难度,27楼是 Post 方式提取 JSon 格式的数据,用 NewObject("Microsoft.XmlHttp") 提交数据,其速度快,但 JSon 的数据解析比较麻烦。
27楼是高手中的高手。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-08-04 10:47
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
收藏
得分:0 
楼上谬赞,我这是在梅子论坛学到的三脚猫功夫。不过通过这次折腾,确实学到不少东西!最起码知道了heml、css、js、dom是什么鬼
2016-08-04 12:15
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
27 楼 的 Post 数据好像不对:
&filter_EQS_aoi_id=798,只能取爱建公司的营业部
缺少:&nd=1470119539707 参数

可以取回555页/8320条记录的参数值应该是:
    PostData ="&filter_LIKES_msdi_name=&filter_LIKES_msdi_reg_address=&filter_EQS_aoi_id=" + ;
        "&page.searchFileName=publicity&page.sqlKey=PAG_SALES_DEPT&page.sqlCKey=SIZE_SALES_DEPT" + ;
        "&_search=false&nd=1470119539707&page.pageSize=15&page.pageNo=" + Transform(lnPage) + ;
        "&page.orderBy=MATO_UPDATE_DATE&page.order=desc"

然后 lnPage 可以从 1 到 555 循环

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-08-08 14:38
快速回复:求助:这类不能从“查看源码”中直接获取列表值的网页数据如何提取
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019843 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved