火车采集器软件交流官方论坛

 找回密码
 加入会员
搜索
火车采集器V9版免费下载火车浏览器 - 可视采集,万能群发,全自动脚本工具
查看: 6090|回复: 7

火车头用户兼一个程序员的建议

[复制链接]
发表于 2007-1-10 23:35:39 | 显示全部楼层 |阅读模式
火车头用户兼一个程序员的建议
再次发表 只希望作者看到!每次采集我都要修改源代码,真希望作者能做出我们需要的软件。
看到第三版的火车头我很心痛。虽然功能越来越多,但是内存暴增,采集遗漏的问题非常突出。作为一个程序员,我实在忍受不了自己动手用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), '''', '', [rfReplaceAll]);
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.
发表于 2007-1-11 09:37:45 | 显示全部楼层
跟ASP 的脚本程序很像
能看懂一部分  
发表于 2007-1-25 22:00:32 | 显示全部楼层
高手出现,我这种小鸟,闪人先!!!!
发表于 2007-1-28 21:50:37 | 显示全部楼层
非常支持楼主的看法。
本人也是程序员,从事软件行业已经5年,也开发过应用软件和行业软件。
软件应该从用户的易用性角度出发,界面一定要简洁。
火车头功能的确很强大,但是对于普通用户来讲,上手太难了。
应该说1.2.1从软件使用步骤来讲,应该是非常不错的。
3.0真的是难使用,如果我没有用过1.2.1,估计要学很长时间来上手。
如果采集没成功,用户挫败感是很强的。

3.0界面有点类似迅雷等软件,比如工具栏按钮,但是差距太明显,不看提示根本不知道什么工具栏按钮什么用。
发表于 2007-1-28 21:56:39 | 显示全部楼层
1.2.1占用内存不高,我在主频600MHZ  128M内存能够运行,但是采集到中途会异常退出,应该说程序存在很多bug和不足之处,如果能够把1.2.1完善,增加数据库入库等操作,就够了。
反之 2.0 3.0.1对系统要求太高了,上述旧电脑根本就无法打开(已经安装net 2),
在我的新机器是P4 2.66G  512MB能够运行。
像楼主所说的webzip offline explorer等软件也是下载大量网页,但是对系统要求不高。
我的旧电脑能够轻松并且稳定的下载上万张网页。
但是火车头就经常出错。
发表于 2007-1-28 22:01:17 | 显示全部楼层

另外,一个非常重要的建议:
像楼主所说:
采集和入库 应该分开操作,
否则一个任务,我要入库到不同CMS系统,就要进行N次采集,这很浪费时间。
采集后,应该把数据保存到本地文件夹开发者自定义的数据库,这样根据用户需求,转换成不同格式的数据库 access mysql等等,适应不同cms需要。

最后,表扬一下火车头,软件功能的确是市场上最强大的
BTW:也是本人使用过的软件中最难上手的:-(
发表于 2007-2-24 13:20:58 | 显示全部楼层
支持下这个
发表于 2007-3-20 19:12:15 | 显示全部楼层
顶起来让火车看
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

QQ|手机版|Archiver|火车采集器官方站 ( 皖ICP备06000549 )

GMT+8, 2024-11-24 23:33

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表