程序代码:
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 编辑 ]
坚守VFP最后的阵地