如何获取链接标题 ( 积分: 100 )

  • 主题发起人 主题发起人 harksky
  • 开始时间 开始时间
H

harksky

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位兄弟,如何获得http://www.jjedu.com.cn/ 教育文件栏目的文章标题列表了??
或者在http://www.jjedu.com.cn/bigclass.asp?ClassType=2 获取文章标题列表并存入listbox中。
谢谢。。(类似软件小偷或新闻采集的程序,能否提供个源代码?0
 
下面的搞定,pageindex是第几页,我看那个页面一共有121页,你可以在每次取得结束后自动更新下一页继续


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls,mshtml,ActiveX;

type
TForm1 = class(TForm)
Button1: TButton;
wb: TWebBrowser;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure wbDocumentComplete(Sender: TObject; const pDisp: IDispatch;
var URL: OleVariant);
private
{ Private declarations }
surl:string;
pageindex:integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
pageindex:=1;
surl:='http://www.jjedu.com.cn/bigclass.asp?ClassType=2&search_word=&page='+inttostr(pageindex);
wb.Navigate(surl);
end;

procedure TForm1.wbDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
ng:olevariant;
element:IHTMLElement;
row:HTMLTableRow;
tb:IHTMLTable;
all: IHTMLElementCollection;
cell:HTMLTableCell;
i,j:integer;
begin
if url=surl then
begin
all:=IHTMLElementCollection(IHTMLDOCUMENT2(wb.Document).body.all);
j:=0;
for i:=0 to all.length-1 do
if (SUCCEEDED(all.item(i,0).QueryInterface(IHTMLElement,element))) and
(element.id='newsGrid') and
(SUCCEEDED(all.item(i,0).QueryInterface(IHTMLTable, tb)) ) then
begin
for j:=1 to tb.rows.length-1 do
if (SUCCEEDED(tb.rows.item(j,0).QueryInterface(IHTMLTableRow, row))) and
(SUCCEEDED(row.cells.item(1,0).QueryInterface(HTMLTableCell, cell)) ) then
ListBox1.Items.Add(cell.outerText);
end;
//这里更新下一页
end;
end;

end.
 
谢谢。我测试下,等下给兄弟你打分。
 
谢谢hs-kill,测试通过,但是还有些问题不明白,就是关于IHTMLElementCollection等函数,还是不太懂,如果有空能否告诉下。
 
不知道hs-kill 能否在帮下忙?
我已经获得相应的网页链接,现在要同时把网页的标题跟链接放到listview中,如果选中一条,则把相应的链接赋值给一个变量。
不知道这个怎么实现??好久没学了,都忘了。
 
也不难啊,取页面元素,然后取href变量值:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,mshtml, StdCtrls, OleCtrls, SHDocVw, ExtCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Splitter1: TSplitter;
wb: TWebBrowser;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure wbDocumentComplete(Sender: TObject; const pDisp: IDispatch;
var URL: OleVariant);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
surl:string;
pageindex:integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
//先清空原来的纪录
for i:=0 to listbox1.Items.Count-1 do
if assigned(listbox1.Items.Objects) then
freemem(pchar(listbox1.Items.Objects));
listbox1.Items.Clear;
pageindex:=1;
surl:='http://www.jjedu.com.cn/bigclass.asp?ClassType=2&search_word=&page='+inttostr(pageindex);
wb.Navigate(surl);
end;

procedure TForm1.wbDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
element:IHTMLElement;
row:HTMLTableRow;
tb:IHTMLTable;
all,links: IHTMLElementCollection;
cell:HTMLTableCell;
i,j:integer;
p:pchar;
str:string;
begin
if url=surl then
begin
all:=IHTMLElementCollection(IHTMLDOCUMENT2(wb.Document).body.all);
j:=0;
for i:=0 to all.length-1 do
if (SUCCEEDED(all.item(i,0).QueryInterface(IHTMLElement,element))) and
(element.id='newsGrid') and
(SUCCEEDED(all.item(i,0).QueryInterface(IHTMLTable, tb)) ) then
begin
for j:=1 to tb.rows.length-1 do
if (SUCCEEDED(tb.rows.item(j,0).QueryInterface(IHTMLTableRow, row))) and
(SUCCEEDED(row.cells.item(1,0).QueryInterface(HTMLTableCell, cell)) ) then
begin
links:=cell.getElementsByTagName('A');
if succeeded(links.item(0,0).QueryInterface(IHTMLElement,element)) then
begin
str:=element.getAttribute('href',0);
getmem(p,length(str));
strpcopy(p,str);
//这里纪录文字和连接
ListBox1.Items.AddObject(cell.outerText,tobject(p));
end;
end;
end;
//这里更新下一页
end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
str:string;
begin
if assigned(listbox1.Items.Objects[listbox1.ItemIndex]) then
str:=string(pchar(listbox1.Items.Objects[listbox1.ItemIndex]));
//这个就是连接字符串,想给谁就给谁
self.Caption:=str;
end;

end.
 
怎么那么奇怪,都变乱码了????
我是想说:谢谢hs-kill的帮忙。虽然借助hs-kill的帮忙,把程序写完了,但是还有很多不懂的地方。比如说IHTML开头的一些函数,它的意思跟作用,属性等都不是很了解。
 
这个.....怎么说呢,要不你去看MSDN 要不就根据名字和他里面的属性猜他的作用...-_-
 

Similar threads

D
回复
0
查看
747
DelphiTeacher的专栏
D
D
回复
0
查看
696
DelphiTeacher的专栏
D
D
回复
0
查看
802
DelphiTeacher的专栏
D
D
回复
0
查看
767
DelphiTeacher的专栏
D
D
回复
0
查看
639
DelphiTeacher的专栏
D
后退
顶部