Сколько как думаете кода в такой простой утилите?! 100-200-1000 строчек кода?! Ерунда все. Большая часть кода, без учёта того что генерит Delphi и среда и объявления переменных – это не больше 25 строк.
Сама утилита тут. В этой тулзе нам нужно создать форму, кинуть на нее – statusbar, edit, memo, одну кнопку и ieparser. Все комментарии отделены в тексте вот так – //. Продолжение под катом.
[code lang='delphi']
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, Buttons, IEParser;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Panel1: TPanel;
Memo1: TMemo;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
Google: TIEParser;
procedure SpeedButton1Click(Sender: TObject);
procedure GoogleElement(Sender: TObject; ElementInfo: TElementInfo);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// код обработчика нажатия на клавишу
procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
fndPage : Integer;
lang : String;
tmp : String;
begin
lang:='en';
// дефолтный язык
tmp:=Edit1.Text;
// берем сам запрос - для которого искать текст из сниппетов
if (tmp[2] in ['a'..'y']) or (tmp[2] in ['A'..'?']) then lang:='ru';
// определяем язык для парсинга текста, автоматически
// по второй букве введенного слова
Memo1.Lines.Clear;
// очищаем результаты
StatusBar1.SimpleText:=Обрабатываем страницу - 1';
Google.URL:='http://www.google.com/search?as_q='+edit1.text+
'&hl='+lang+'&inlang='+lang+'&num=100&lr=lang_'+lang+'&filter=0';
Google.Go;
// задаем начальный урл и начинаем парсить наш текст.
// Как текст скачается, он переходит
// в обработчик onElement от ieParser
for fndPage:=2 to 9 do
// проходим по всем оставшимся 10 страницам
begin
StatusBar1.SimpleText:='Обрабатываем страницу - '+IntToStr(fndPage);
Google.URL:='http://www.google.com/search?as_q='+edit1.text
+'&hl='+lang+'&inlang='+lang+'&num=100&lr=lang_'+lang+'&filter=0&start='
+IntToStr(fndPage);
Google.Go;
end;
Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+edit1.Text+'.txt');
// сохраняем результат в папку, где наша программа и с именем ключевика
ShowMessage(ExtractFilePath(Application.ExeName)+edit1.Text+'.txt Сохранен успешно.');
// Сообщаем юзеру, что все отлично.
end;
// Ну а это сам парсинг сниппетов. Ищем все элементы типа
// TD и class='J' - все что внутри и есть сниппет.
procedure TForm1.GoogleElement(Sender: TObject; ElementInfo: TElementInfo);
Var
tmpSnip : String;
i : Integer;
begin
if (UpperCase(ElementInfo.TagName) = 'TD')
and (UpperCase(ElementInfo.ClassName) = 'J') then
begin
tmpSnip:=ElementInfo.OuterText;
i:=Pos(chr(13), tmpSnip);
Delete(tmpSnip,i+1,Length(tmpSnip)-i);
Memo1.Lines.Add(tmpSnip);
end;
end;
end.
[/code]
В качестве домашнего задания – измените код так, чтобы можно было собирать сниппеты для кучи кеев.
{ 1 trackback }
{ 10 comments… read them below or add one }
Вроде ничего сложного.
Думаю осилю
примерно так на глаз
//добавляем в TForm1.SpeedButton1Click
for I := 0 to Memo1.Lines.Count – 1 do
begin
tmp:=Memo1.Lines.Strings[I];
// ……..
end;
В это же Memo низзя – надо второе на форму поставить ))
Впрочем, как и всегда: все гениальное – просто
Может кто кинуть компилированный GoogleSnippets для нескольких кеев. И как бы его заставить работать через прокси, а то гугла банит…….
СПС Всем !
Щас попробую видоизменить это чудо, чтобы на выходе был обычный текст, для серо-белых проектов.
вот закуздрячил штукенцию пободрее, берите кто хотите. умеет парсить список кеев, сливать в один файл или в несколько (если в несколько, то количество определяется количеством кеев), имеется задержка между выпарсиваниями. слепил из того что было за час где-то… спасибо СеоКодеру =)
to Разработчик сайтов:
супер!!!!!! респект
Ошибся…
to Schnaps*
парсилка перестала работать
((
Leave a Comment