如何实时获取网页中特定的内容和与之对应的数据?(100分)

  • 主题发起人 主题发起人 xiaoshou
  • 开始时间 开始时间
X

xiaoshou

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位,在delphi中如何准确得到网页中特定内容和与之对应的数据?比如,在网上商城的网页中获取每种商品的名称和价格,而且时时刻刻确保名称和价格的一一对应,在delphi中如何实现?
 
写个思路先:
1.可以先使用Indy的IdHTTP.Get(Http_Link)方法得到网上商城的某网页的内容。
2.然后分析该网页内容,定义正则表达式,使之能匹配“商品的名称和价格”。
3.通过正则表达式可以获取“商品的名称和价格”。
4.以系统服务或定时器的方式运行该程序,达到“时时刻刻确保名称和价格的一一对应”的效果。
[:D]
 
看看我以前写的:http://www.delphibbs.com/delphibbs/dispq.asp?lid=3863733
我用的是D2007,可以用中文来命名变量名,下面这些代码大富翁的离线包都有的,我只是做了重新的组合而已:
type
TDataRec = record
通用名: string;
商品名: string;
剂型: string;
规格: string;
包装材质: string;
转换比: string;
质量层次: string;
单位: string;
报价: string;
供应商名称: string;
生产企业名称: string;
end;
TDataArr = array of TDataRec;

function GetHtmlTableCell(aTable: IHTMLTable; aRow, aCol: Integer): IHTMLElement;
var
Row: IHTMLTableRow;
begin
Row := aTable.rows.item(aRow, aRow) as IHTMLTableRow;
Result := Row.cells.item(aCol, aCol) as IHTMLElement;
end;

function TfrmMain.GetDataFromUrl(const URL: string): TDataArr; //获取数据
var
Docintf: IHTMLDocument2;
tblintf: IHTMLTable;
iRow, RowCount, iTalbeNum, iTableCount,DataIndex: Integer;
list: IHTMLElementCollection;
item: IHTMLElement;
begin
bUrlComplete := False;
frmWebBrowser.Navigate(URL);
while not bUrlComplete do
Application.ProcessMessages;

Docintf := frmWebBrowser.Document as IHTMLDocument2;
//获取所有的表
list := Docintf.all.tags('table') as IHTMLElementCollection;
iTableCount := list.length;
DataIndex := 0;
for iTalbeNum := 0 to Pred(iTableCount) do
begin
item := list.item(iTalbeNum, varempty) as IHTMLElement;
if item.getAttribute('id', 0) = 'AutoNumber3' then
begin
tblintf := list.item(iTalbeNum, varempty) as IHTMLTable;
//从表格获取数据
RowCount := tblintf.rows.Length;
for iRow := 0 to RowCount - 1 do
begin
SetLength(Result, DataIndex + 1); //标题行排除
with Result[DataIndex] do
begin
通用名 := Trim(GetHtmlTableCell(tblintf, iRow, 0).innerText);
商品名 := Trim(GetHtmlTableCell(tblintf, iRow, 1).innerText);
剂型 := Trim(GetHtmlTableCell(tblintf, iRow, 2).innerText);
规格 := Trim(GetHtmlTableCell(tblintf, iRow, 3).innerText);
包装材质 := Trim(GetHtmlTableCell(tblintf, iRow, 4).innerText);
转换比 := Trim(GetHtmlTableCell(tblintf, iRow, 5).innerText);
质量层次 := Trim(GetHtmlTableCell(tblintf, iRow, 6).innerText);
单位 := Trim(GetHtmlTableCell(tblintf, iRow, 7).innerText);
报价 := Trim(GetHtmlTableCell(tblintf, iRow, 8).innerText);
供应商名称 := Trim(GetHtmlTableCell(tblintf, iRow, 9).innerText);
生产企业名称 := Trim(GetHtmlTableCell(tblintf, iRow, 10).innerText);
end;
Inc(DataIndex);
end;
end;
end;

end;
 
lanyaoshi 能够给我发份源码吗?:)
谢谢
lhasoft@126.com
 
不要老是想要别人的成果,自己多想想。
 
我写的就是源码呀,当然,要适应你的要求,你得自己改了。我这段代码的意思是从网页中的表格中获取数据。
 
接受答案了.
 
后退
顶部