怎么获得网页上<table>表格里的文字数据(100)

  • 主题发起人 主题发起人 wlyft
  • 开始时间 开始时间
W

wlyft

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么获得网页上<table>表格里的文字数据QQ3523956
 
下载网页文件,用tstringlist打开后解析
 
没有别的办法?除了下网页源码分析
 
HTMLParser StringTable.pas
 
用正则表达室写个小引擎很快的
 
TWedBrowser
 
可以用IE的DOM接口来获取网页上的数据.也可以写正则引擎,不过麻烦点.
 
有没有例字,我是个初学者
 
糟糕前几天我遇到一段代码是符合你的要求的可是我把丢忘了
 
uses mshtml; function GetHtmlTableCell(aTable:IHTMLTable;aRow,aCol:integer):IHTMLElement; var Row:IHTMLTableRow; node:IHTMLElement; begin Row:=aTable.rows.item(aRow,aRow) as IHTMLTableRow; Result:=Row.cells.item(aCol,aCol) as IHTMLElement; end; function GetHtmlTable(aDoc:IHTMLDocument2;aIndex:Integer):IHTMLTable; var list:IHTMLElementCollection; begin list:=aDoc.all.tags('table') as IHTMLElementCollection; Result:=list.item(aIndex,aIndex) as IHTMLTable; end; procedure TForm1.Button1Click(Sender: TObject); var Docintf:IHTMLDocument2; tblintf:IHTMLTable; begin docintf:=WebBrowser1.Document as IHTMLDocument2; tblintf:=GetHtmlTable(docintf,0); ShowMessage( GetHtmlTableCell(tblintf,1,1).innerText); end; 是不是这段??我试过起初是可以的,后来不知为什么不行了,太搞了,我头晕了我QQ是3523956加我吧
 
要看你的实现方式1.是否用插件在ie取2.是否自己用http协议取3.是用注射api取ie窗口信息?4.只是文本文件提取
 
在webbrowser里取
 
在webbrowser获取会很慢的,我认为用正则表达式+TIDHTTP比较好,我做过类似的项目,欢迎到我的群里讨论:14799474
 
没人举个例子
 
//目的:采购资源// 参数:wb1:内嵌Web浏览器// URLList:资源地址// GoodStype:资源类型 0:木头 1:石头 2:水晶 3:粮食// price:价格(默认0金16银)procedure BuyStock(wb1:TWebBrowser;URLList:TStrings;Goodstype:string='0';price:string='16');var irow:Integer; ITable:IHTMLTable; Row:IHTMLTableRow; Cell:IHTMLELement; chils:IHTMLElementCollection; i:integer;begin try wb1.Navigate(RefURL('http://sd1.duniu.com/market?by=price&asc=1&type=1&goodstype='+goodstype)); //等待页面加载完成 while wb1.ReadyState<>READYSTATE_COMPLETE do begin Application.ProcessMessages; end; //找到出售资源的表格,ct1为表格的ID if getElementById(wb1,'ct1')=nil then exit; if getElementByID(wb1,'ct1').tagName<>'TABLE' then Exit; ITable:= getElementByID(wb1,'ct1') as IHTMLTABLE; for irow:=1 to ITable.rows.length - 1 do begin row:=ITable.rows.item(irow,varEmpty) as IHTMLTableRow; //获得单价 cell:=Row.cells.item(3,varEmpty) as IHTMLELement; if StrToInt(MidStr(Cell.innerText,3,2))<= StrToInt(price) then begin //得到"操作”单元格的内容 cell:=Row.cells.item(5,varEmpty) as IHTMLELement; //得到"操作"的下级HTML元素,以找出连接 chils:=Cell.children as IHTMLElementCollection; for i:=0 to chils.length-1 do begin if ((chils.item(i,varEmpty)) as IHTMLElement).tagName='A' then begin //添加到URLList中,以备下面使用 URLList.Add(((chils.item(i,varEmpty)) as IHTMLElement).getAttribute('href',0)); break; end; end; end else Break; end; //如果找到可以采购的资源,就开始采购 while URLList.Count<>0 do begin wb1.Navigate(URLList[0]); while wb1.ReadyState<>READYSTATE_COMPLETE do begin Application.ProcessMessages; end; URLList.Delete(0); end; except end;end;这是我写的七龙纪的采购资源中的一段
 
是那种很复杂的表的不是几行几列的如http://jm2yvk1qa4x.5166.info/点盘口,右框的那种表格
 
右边那是在frame里的,你要先进frame再用那段代码去读,直接查document肯定是找不到的
 
是的,我读出来的,就是读时不能一个CELL一个CELL的读,而是把一个表的所有东西都给显示出来了
 
后退
顶部