![](zzz/editor/img/code.gif)
程序代码:
CLEAR
T1=SECONDS()
CREATE CURSOR TQHDM (层次 N(1),代码 C(12),分类 C(3),名称 C(40),网址 C(100))
LOCAL DM,MC
DM=[41.html] && 如:[41.html]、[4101.html]、[410102.html],分别代表市、县、乡
MC=[河南省] && 对应于上面的DM,如郑州市
CWZ=[http://www.stats.]
NUM=LEN(GETWORDNUM(DM,1,[.]))
CDM=ICASE(NUM=2,DM,NUM=4,LEFT(DM,2)+[/]+DM,NUM=6,LEFT(DM,2)+[/]+SUBSTR(DM,3,2)+[/]+DM)
CC=ICASE(NUM=2,1,NUM=4,2,NUM=6,3) && 1、2、3 分别代表市、县、乡
EX=2 && EX>=CC AND EX<=5 &&控制提取数据范围,EX=2,说明只提取到县级数据,余以此类推。
NLEN=LEN(CWZ)
URL=CWZ+CDM
INSERT INTO TQHDM VALUES (CC,PADR(GETWORDNUM(DM,1,[.]),12,[0]),[],MC,URL)
DO WHILE .T.
SELECT * FROM TQHDM INTO CURSOR TEMP WHERE 层次=CC
IF EOF()
EXIT
ENDIF
SCAN FOR NOT EMPTY(网址)
CSTR=CWY(SUBSTR(ALLTRIM(网址),NLEN+1),ICASE(CC=1,'citytr',CC=2,'countytr',CC=3,'towntr',CC=4,'villagetr'))
NROW=ALINES(AA,CSTR,[</td></tr>])
FOR I=1 TO NROW
=ALINES(BB,AA(I),[</td><td>])
DM=RIGHT(BB(1),12)
FL=IIF(CC+1=5,BB(2),[])
MC=IIF(CC+1=5,BB(3),SUBSTR(BB(2),AT([>],BB(2))+1))
URL=IIF([.html]$AA(I),SUBSTR(ALLTRIM(网址),1,RAT([/],网址))+SUBSTR(BB(2),1,AT([>],BB(2))-1),[])
INSERT INTO TQHDM VALUES (CC+1,DM,FL,MC,URL)
ENDFOR
ENDSCAN
IF CC=EX
EXIT
ENDIF
CC=CC+1
ENDDO
MESSAGEBOX(SECONDS()-T1)
SELECT TQHDM
BROWSE
FUNCTION CWY
PARAMETERS WY,BZ
LCURL = [http://www.stats.]+WY
OHTML = CREATEOBJECT("MICROSOFT.XMLHTTP")
OHTML.OPEN([GET], LCURL, .F.)
OHTML.SEND
CSTRA=STRTRAN(STRTRAN(STRTRAN(STRTRAN(STREXTRACT(STRCONV(OHTML.RESPONSEBODY,2),[名称</td></tr>],[</table></TD></TR>]),;
[<tr class='&BZ'><td>],[]),[</a>],[]),[<a href=],[]),['],[])
RETURN CSTRA
在17楼代码的基础上稍做修改,可以分别提取市、县、乡级数据[根据输入内容不同],只要修改第四行DM= 及第五行MC= 后面的内容,就可以提取不同的数据。
[
本帖最后由 sdta 于 2012-10-29 20:22 编辑 ]