注册 登录
编程论坛 VFP论坛

再次求助:如何将《仙道九绝》各章节内容完整地爬下来?

王咸美 发布于 2025-12-05 21:34, 792 次点击
下列代码能将《仙道九绝》小说各章节的当前页爬下来,但各章节小说有的有三页,有的有两页,怎样完善下列代码将各章节小说完整的爬下来?请高手赐教,万分感谢!!!(不喜勿喷,全当路过)

SET DEFAULT TO (ADDBS(JUSTPATH(SYS(16))))
DECLARE long PostMessageA IN user32 long,long,long,long
IF !FILE("仙道九绝.dbf")
    CREATE TABLE 仙道九绝 (title C(100), addr C(254), txt M)
    USE
ENDIF
USE 仙道九绝 ALIAS tu
of = CREATEOBJECT("form1")
of.show(1)
CLOSE TABLES ALL
CLEAR ALL
RETURN

DEFINE CLASS form1 as Form
    width = 800
    height = 600
    AutoCenter = .T.
    AllowOutput = .f.
    ADD OBJECT but as commandbutton WITH left=10,top=10,width=100,height=22,caption="开始"
    ADD OBJECT grd as grid WITH left=10,top=40,width=250,height=550,RecordSource="tu",AllowCellSelection=.f.
    ADD OBJECT edt as editbox WITH left=280,top=40,width=510,height=550
    ADD OBJECT web as Olecontrol with OleClass="Shell.Explorer.2",left=-100

    PROCEDURE Destroy
        UNBINDEVENTS(this.hWnd)
    ENDPROC
   
    PROCEDURE Init
        this.web.Silent = .t.
        BINDEVENT(this.hWnd, 0x401, this, "myMessage")
    ENDPROC

    PROCEDURE but.click
        ZAP IN "tu"
        thisform.edt.value = " "
        thisform.web.navigate("http://www.)
    ENDPROC
   
    PROCEDURE grd.click
        thisform.edt.value = tu.txt
        thisform.edt.SelStart = 0
    ENDPROC

    PROCEDURE web.documentComplete(pdisp, url)
        IF (SYS(3095, pdisp) == SYS(3095, this))
            PostMessageA(thisform.hWnd, 0x401, 0, 0)
        ENDIF
    ENDPROC

    FUNCTION myMessage(hWnd, uMsg, wParam, lParam)
        dom = this.web.document
        IF VARTYPE(dom) != "O"
            this.Enabled = .t.
            RETURN
        ENDIF
        IF EMPTY(tu.addr)
        
            * ie版本低试用
            lis = dom.getElementsByTagName("li")
           FOR EACH li IN lis   
              IF li.classname == "line3"
                    INSERT INTO tu VALUES (;
                        li.getElementsByTagName("a").item[0].innertext,;
                        li.getElementsByTagName("a").item[0].href, "";
                  )
                ENDIF
            ENDFOR
         
            GO TOP IN "tu"
            this.grd.setfocus
            this.web.navigate(ALLTRIM(tu.addr))
            RETURN     
        ENDIF
        REPLACE tu.txt WITH ALLTRIM(tu.title)+ 0h0D0A0D0A + dom.getElementById("chapter").innertext
        ? ALLTRIM(tu.title)
        SKIP IN "tu"
        IF !EOF("tu")
            this.grd.setfocus
            this.web.navigate(ALLTRIM(tu.addr))
            RETURN
        ENDIF
        GO TOP IN "tu"
        this.grd.setfocus
        this.Enabled = .t.
    ENDFUNC
ENDDEFINE

[此贴子已经被作者于2025-12-5 21:35编辑过]

52 回复
#52
王咸美4 天前 21:02
@吹水佬 能分享一下具体代码吗?
#53
吹水佬4 天前 21:13
以下是引用王咸美在2025-12-15 21:02:16的发言:

@吹水佬 能分享一下具体代码吗?

什么代码?
WebView2吗?XP用不了。
12