| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6166 人关注过本帖, 3 人收藏
标题:老师好,又来请教了,这个网页的采集入口如何找,谢谢
只看楼主 加入收藏
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
真心佩服
2021-06-02 03:59
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1712
专家分:3318
注 册:2012-2-29
收藏
得分:0 
受益,谢谢!
2021-06-02 05:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏(1)
得分:0 
以下是引用sdta在2021-6-1 23:11:24的发言:

STREXTRACT()在解析这种大块头JSON数据中速度确实慢,ALINES()速度则飞快,建议大家以后解析类似这种大块头的文本,使用ALINES()函数。ALINES()是解析文本字符的利器。

这个循环有2000多次,STREXTRACT()在循环体每次从头起搜索大块头肯定快不了。
ALINES()在分配内存和读入数据时有点耗时,以后寻址取数就快了。
循环体内如果能用其他字符串函数代替ALINES()应该会快点,用ALINES()来处理较规范的数据确是便捷些。

有点不明白,VFP既然有SYS(2600)使用到指针,为何不提供处理指针的方法?

试用指针来处理这个问题,好象可以做到 0.1 秒杀,大家试试看:
程序代码:
DECLARE LONG GetProcessHeap IN Kernel32
DECLARE LONG HeapAlloc IN kernel32 LONG, LONG, LONG
DECLARE LONG HeapFree IN Kernel32 LONG, LONG, LONG
DECLARE LONG strstr IN msvcrt LONG,STRING@

CREATE CURSOR 大乐透 (红1 C(2), 红2 C(2), 红3 C(2),红4 C(2),红5 C(2),兰1 C(2),兰2 C(2),期号 C(5),球具 N(1))
cUrl = "https://webapi./gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=0&" + SUBSTR(SYS(2015), 2)
oHTTP=NEWOBJECT("MSXML2.XMLHTTP")
oHTTP.Open("GET", cUrl, .F.)
oHTTP.SETREQUESTHEADER("Content-Type", "text/html;charset=UTF-8")
oHTTP.Send()
lcText = oHTTP.ResponseText

t1 = SECONDS()
nSize = LEN(lcText)+1
pText = HeapAlloc(GetProcessHeap(), 8, nSize)
SYS(2600, pText, nSize, lcText+0h00)

p = strstr(pText, "lotteryDrawNum")
DO WHILE p > 0
    DrawNum =  SYS(2600, p+17, 5)
    p2 = strstr(p, "lotteryDrawResult") + 20
    p = strstr(p2, "lotteryEquipmentCount") + 23
    EquipmentCount = VAL(SYS(2600, p, 1))
    INSERT INTO 大乐透 VALUES (SYS(2600, p2, 2),;
                               SYS(2600, p2+3, 2),;
                               SYS(2600, p2+6, 2),;
                               SYS(2600, p2+9, 2),;
                               SYS(2600, p2+12, 2),;
                               SYS(2600, p2+15, 2),;
                               SYS(2600, p2+18, 2),;
                               DrawNum, EquipmentCount)
    p = strstr(p, "lotteryDrawNum")
ENDDO
? SECONDS() - t1  && 0.094
HeapFree(GetProcessHeap(), 1, pText)
SELECT * FROM 大乐透
RETURN


2021-06-02 10:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 33楼 吹水佬
这个方法不错,学习了!
0.084秒

坚守VFP最后的阵地
2021-06-02 11:01
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
真厉害,0.040秒
2021-06-02 16:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用jinanshui在2021-6-2 16:59:29的发言:

真厉害,0.040秒

楼主的电脑高配

坚守VFP最后的阵地
2021-06-02 17:12
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
吹版请教几个问题:
1 msvcrt.dll 是API 动态链接库吗
2 strstr()函数的功能是什么,其中只有两个参数吗,网上没找到用法,能详细介绍下用法吗

坚守VFP最后的阵地
2021-06-02 21:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用sdta在2021-6-2 21:35:00的发言:

吹版请教几个问题:
1 msvcrt.dll 是API 动态链接库吗
2 strstr()函数的功能是什么,其中只有两个参数吗,网上没找到用法,能详细介绍下用法吗

msvcrt.dll是windows自带的C语言运行库,VFP9运行库也自带v7.1版本的msvcr71.dll
strstr(s1,s2)是在s1搜寻s2,成功返回s2地址,失败返回0
strstr()是用基本算法按顺序逐个字符比对搜索,效率不算高
2021-06-03 08:30
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用吹水佬在2021-6-3 08:30:49的发言:


msvcrt.dll是windows自带的C语言运行库,VFP9运行库也自带v7.1版本的msvcr71.dll
strstr(s1,s2)是在s1搜寻s2,成功返回s2地址,失败返回0
strstr()是用基本算法按顺序逐个字符比对搜索,效率不算高

谢谢吹版回复
以前从没用过API函数,看样子要从头学习API函数

坚守VFP最后的阵地
2021-06-04 12:02
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:332
专家分:804
注 册:2021-1-9
收藏
得分:0 
收藏收藏
2021-06-04 15:05
快速回复:老师好,又来请教了,这个网页的采集入口如何找,谢谢
数据加载中...
 
   



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

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