火车头用户兼一个程序员的建议
火车头用户兼一个程序员的建议再次发表 只希望作者看到!每次采集我都要修改源代码,真希望作者能做出我们需要的软件。
看到第三版的火车头我很心痛。虽然功能越来越多,但是内存暴增,采集遗漏的问题非常突出。作为一个程序员,我实在忍受不了自己动手用delphi做了旅游市场的采集。
采集一定要分步骤。
第一步,目标采集网址最终内容页地址数组的生成。这点火车头做的很好没说的。
第二步。先把目标页下载下来,保存在本地硬盘上,拜托别和我说远程采集,服务器会断网,你自己拨号也会断,在网上什么事情都会发生。老老实实的保存到本地硬盘来吧。别说内存读取,都是没用的,保存到本地看得到的才是最重要的,今天这个数据网上会有,明天就会没得了。
第三步 才是采集。可能我采集要修改参数。每次都要变。改个四五次就要重新读取服务器4 5边,说不定对方看到来源ip异常马上就中断服务了。所以 第二步很重要
火车头每次只能读取3000-5000内容页问题出在这里,得先保存到硬盘!!!别再一边读一边写数据库了。事实证明会出错。
第四步发布到远程数据库上。这点火车头做的很好没说的。
错误就在互联网是不可预测的 一切得先下载下来才是正确之路。
我自己编就是用delphi编一个读取本地文件数据分离的程序。我文件下载用 offline explorer搞定了。offline explorer可以利用ie的cookie登录。 登录问题解决。
我的目的是不能少一篇文章。现在的火车头太不稳定。按照我的方法60000的数据没有出错过
最近又采集了3000多房源信息 真希望作者能看到我的呼声。
网址www.youyou8.com看我的内容是多少 音乐 酒店 机票
附上delphi源代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, ADODB;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Query1: TADOQuery;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
function UnicodeEncode(Str:string;CodePage:integer):WideString;
var
Len:integer;
begin
Len:=Length(Str)+1;
SetLength(Result,Len);
Len:=MultiByteToWideChar(CodePage,0,PChar(Str),-1,PWideChar(Result),Len);
SetLength(Result,Len-1); //end is #0
end;
function UnicodeDecode(Str:WideString;CodePage:integer):string;
var
Len:integer;
begin
Len:=Length(Str)*2+1;//one for #0
SetLength(Result,Len);
Len:=WideCharToMultiByte(CodePage,0,PWideChar(Str),-1,PChar(Result),Len,nil,nil);
SetLength(Result,Len-1);
end;
function Big52Gb(Str:string):string;
begin
Result:=UnicodeDecode(UnicodeEncode(Str,cp_utf8),936);
//SetLength(Result,Length(Str));
//LCMapString(GetUserDefaultLCID,LCMAP_SIMPLIFIED_CHINESE,
// PChar(Str),Length(Str),
// PChar(Result),Length(Result));
end;
Function midstr(var jsrc:string;jstart,jend:string):string;
var
jstartlen,jstartpos,jendpos:Integer;
jsrc1,jsrc2:string;
begin
jstartlen:= Length(jstart);
jstartpos:=pos(jstart,jsrc);
if jstartpos>0 then
begin
jsrc1:=copy(jsrc,jstartpos+jstartlen,length(jsrc)-jstartpos);
jendpos:=pos(jend,jsrc1)-1;
jsrc2:=StringReplace(copy(jsrc1,1,jendpos), '''', '', );
jsrc:=copy(jsrc,pos(jsrc2,jsrc)+Length(jsrc2),Length(jsrc));
//jsrc:='';
result:=jsrc2;
end
else
begin
result:='';
end
end;
var
i:Integer;
txtfile : TStringList;
jdir,jprice,jdescription,jpic,src,f1,jtitle,jname,jmob,jmail,jmsn,jtel,jfax,jaddr,jqq:string;
begin
txtfile := TStringList.Create;
for i:=135 to 4709 do
begin
f1:='d:\y\y\HotelInfo-'+inttostr(i)+'.html';
if fileexists(f1)=false then
else
begin
txtfile.LoadFromFile(f1);
src:=Big52Gb(txtfile.Text);
jtitle:=midstr(src,'<title id="hotelTitle">','预订');
jtitle:=jtitle+' '+midstr(src,'<span id="lblHotelGrade" title="','"');
jpic:=midstr(src,'target=''_blank''><img src=''','''');
jdescription:=midstr(src,'<span id="lblIntro" Display="none" style="DISPLAY: none">','</span>');
jdescription:=jdescription+midstr(src,'<!--酒店位置信息开始-->','<!--酒店位置信息结束-->');
//jdescription:=jdescription+midstr(src,'<!--酒店房型信息开始-->','<!--酒店房型信息结束-->');
jprice:=midstr(src,'协议底价¥','.');
Query1.Sql.Text:='insert into c (url,title,dir,price,pic,description) values('''+f1+''','''+jtitle+''',''2203'','''+jprice+''','''+jpic+''','''+jdescription+''')';
//memo1.Text:=Query1.Sql.Text;
Query1.ExecSQL;
end;
end;
end;
end. 跟ASP 的脚本程序很像
能看懂一部分:lol 高手出现,我这种小鸟,闪人先!!!! 非常支持楼主的看法。
本人也是程序员,从事软件行业已经5年,也开发过应用软件和行业软件。
软件应该从用户的易用性角度出发,界面一定要简洁。
火车头功能的确很强大,但是对于普通用户来讲,上手太难了。
应该说1.2.1从软件使用步骤来讲,应该是非常不错的。
3.0真的是难使用,如果我没有用过1.2.1,估计要学很长时间来上手。
如果采集没成功,用户挫败感是很强的。
3.0界面有点类似迅雷等软件,比如工具栏按钮,但是差距太明显,不看提示根本不知道什么工具栏按钮什么用。 1.2.1占用内存不高,我在主频600MHZ128M内存能够运行,但是采集到中途会异常退出,应该说程序存在很多bug和不足之处,如果能够把1.2.1完善,增加数据库入库等操作,就够了。
反之 2.0 3.0.1对系统要求太高了,上述旧电脑根本就无法打开(已经安装net 2),
在我的新机器是P4 2.66G512MB能够运行。
像楼主所说的webzip offline explorer等软件也是下载大量网页,但是对系统要求不高。
我的旧电脑能够轻松并且稳定的下载上万张网页。
但是火车头就经常出错。 :Q :Q :Q :Q :Q :Q :Q :Q :Q
另外,一个非常重要的建议:
像楼主所说:
采集和入库 应该分开操作,
否则一个任务,我要入库到不同CMS系统,就要进行N次采集,这很浪费时间。
采集后,应该把数据保存到本地文件夹开发者自定义的数据库,这样根据用户需求,转换成不同格式的数据库 access mysql等等,适应不同cms需要。
最后,表扬一下火车头,软件功能的确是市场上最强大的
BTW:也是本人使用过的软件中最难上手的:-( 支持下这个 顶起来让火车看
页:
[1]