标题:老师好,这个网页的采集入口如何找,谢谢
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
好象下载 xx.html 就可以

程序代码:
url =  "https://xkkm./web/xx.html"
wh = CREATEOBJECT("WinHttp.WinHttpRequest.5.1") 
wh.Open("GET", url, 0)
wh.Send()
trs = STREXTRACT(wh.ResponseText,[<tbody],[</tbody])
CREATE CURSOR tt (序号 I,地区 C(10),学校代码 C(6),学校名称 C(20),选考科目要求 C(10),学校网址 C(100))
n = AT("<tr>",trs)
DO WHILE n>0
    trs = SUBSTR(trs,n+4)
    INSERT INTO tt VALUES (;
        VAL(STREXTRACT(trs,[>],[<],1)),;
        STREXTRACT(trs,[>],[<],3),;
        STREXTRACT(trs,[>],[<],5),;
        STREXTRACT(trs,[>],[<],7),;
        STREXTRACT(trs,[>],[<],10),;
        STREXTRACT(trs,[>],[<],19))
    n = AT("<tr>",trs)
ENDDO
SELECT * FROM tt
2022-01-07 20:41
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
回复 21楼 吹水佬
2022-01-08 02:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 22楼 jinanshui
是不是网路问题
试试将
wh = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")
改为
wh = CREATEOBJECT("MSXML2.XMLHTTP")
2022-01-08 12:37
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
回复 23楼 吹水佬
谢谢,老师,可以采集到这一页的信息,我们的想法是把各个学校的信息采集出来,麻烦老师再考虑一下.
2022-01-08 15:05
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
回复 23楼 吹水佬
老师,例如

2022-01-08 15:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 25楼 jinanshui

程序代码:
cPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)

DECLARE LONG _strdup IN msvcrt as apiStrdup STRING@
DECLARE LONG free    IN msvcrt as apiFree   LONG
DECLARE LONG strstr  IN msvcrt as apiStrstr LONG,STRING@

CREATE CURSOR tt (序号 I,地区 C(10),学校代码 C(6),学校名称 C(30),选考科目要求 C(10),学校网址 C(100))
CREATE CURSOR tmp (序号 I,层次 C(10),专业类名称 C(50),选考科目范围 C(100),类中所含专业 C(240))

jsCode = [function encode(unencoded){return encodeURIComponent(unencoded).replace(/'/g,"%27").replace(/"/g,"%22");}]
sc = CREATEOBJECT("ScriptControl")
sc.Language = "JavaScript"
sc.AddCode(jsCode)

wh = CREATEOBJECT("WinHttp.WinHttpRequest.5.1") 
wh.Open("GET", "https://xkkm./web/xx.html", 0)
wh.Send()
trs = STREXTRACT(wh.ResponseText,[<tbody],[</tbody])

ps = apiStrdup(trs)
p1 = apiStrstr(ps,"<tr>")
DO WHILE p1>0
    p2 = apiStrstr(p1,"</tr>")
    tds = SYS(2600, p1+4, p2-p1-4)
    INSERT INTO tt VALUES (;
        VAL(STREXTRACT(tds,[>],[<],1)),;
        STREXTRACT(tds,[>],[<],3),;
        STREXTRACT(tds,[>],[<],5),;
        STREXTRACT(tds,[>],[<],7),;
        STREXTRACT(tds,[>],[<],10),;
        STREXTRACT(tds,[>],[<],19))
    p1 = apiStrstr(p2,"<tr>")
ENDDO
apiFree(ps)

** 示例只取一个学校,DBF文件名格式:学校名称(学校代码).DBF
SELECT tt
LOCATE FOR ALLTRIM(学校代码)=="10007"
ckxq(ALLTRIM(学校代码),ALLTRIM(学校名称))

CLOSE DATABASES ALL 
CLEAR ALL 
RETURN

FUNCTION ckxq(cDM,cMC)
    cDBF = cMC+"("+cDM+")"
    SELECT tmp
    COPY TO (cDBF)
    USE (cDBF) IN 0 ALIAS mc
    wh.Open("POST", "https://xkkm./xkkm/queryXxInfor", 0)
    wh.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    wh.Send("dm="+cDM+"&mc="+encodeURI(encodeURI(cMC))+"&yzm=ok")
    trs = STREXTRACT(wh.ResponseText,[<tbody],[</tbody])
    ps = apiStrdup(trs)
    p1 = apiStrstr(ps,"<tr ")
    DO WHILE p1>0
        p1 = apiStrstr(p1,"<td ")
        p2 = apiStrstr(p1,"</tr>")
        tds = SYS(2600, p1, p2-p1)
        INSERT INTO mc VALUES (;
            VAL(STREXTRACT(tds,[>],[<],1)),;
            STREXTRACT(tds,[>],[<],3),;
            ALLTRIM(STREXTRACT(tds,[>],[<],5),0h0D,0h0A,0h20),;
            STREXTRACT(tds,[>],[<],7),;
            STRTRAN(ALLTRIM(STREXTRACT(tds,[>],[</td>],11),0h0D,0h0A,0h20),"<br/>",","))
        p1 = apiStrstr(p2,"<tr ")
    ENDDO
    apiFree(ps)
    USE IN "mc"
ENDFUNC

FUNCTION encodeURI(cUnencoded)
    RETURN sc.run("encode", cUnencoded)
ENDFUNC
2022-01-08 22:20
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
回复 26楼 吹水佬
谢谢吹版,可以了,谢谢
2022-01-10 00:21
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
回复 26楼 吹水佬
谢谢吹版主老师,我现在试着怎样把全部学校都下载到一个dbf中
2022-01-10 08:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用jinanshui在2022-1-10 08:50:29的发言:

谢谢吹版主老师,我现在试着怎样把全部学校都下载到一个dbf中

一个学校一个表不好吗
如果学校之间的数据没什么关联就无必要合并在一起,这样处理数据相对便捷高效些
需要学校之间某些数据整合时再筛选处理
2022-01-10 11:37
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
回复 29楼 吹水佬
谢谢,吹版主老师,您说得太对了.
2022-01-11 12:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505797-1-1.html




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

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