C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Парсинг сайтов  (Прочитано 1303 раз)
ДмитрийЛАСТ
Участник


Сказали спасибо: +3/-0
Offline

Сообщений: 11


Парсинг сайтов
« : 26 Март 2015, 08:00:10 »

Здравствуйте!
Пробую разобраться с boost. И есть несколько вопросов.
Требуется определить на ряде сайтов, есть ли соответствующие разделы:
Руководство. Педагогический (научно-педагогический) состав
Материально-техническое обеспечение и оснащенность образовательного процесса

Код:
Пока смог определить, если такой текст на странице. Как определить ссылку, и выйти по ней?
И, непонятная проблема. Если на одном из сайтов текст найден, то он находится и на всех остальных, хотя там его нет.
Код:
for (int i = 0; i Items->Count; i++) {
Application->ProcessMessages();
TIdHTTP *httpBrowse = new TIdHTTP(NULL);
TMemo *httpMemo = new TMemo(Owner);
httpMemo->Parent = ScrollBox1;
httpMemo->Align = alClient;
httpMemo->Visible = true;
httpMemo->Lines->Add(httpBrowse->Get(ListBox1->Items->Strings[0]));
for (int j = 0; j Items->Count; j++) {
/*std::wstring wstdLine(HtmlMemoText.t_str());
std::string stdLine(wstdLine.begin(), wstdLine.end());*/
Application->ProcessMessages();
String HtmlMemoText = httpMemo->Text;
std::string stdLine(AnsiString(HtmlMemoText).c_str());
std::string ExpressionText(AnsiString(ListBox2->Items->Strings[j]).c_str());
//boost::regex xRegEx (AnsiString(ListBox2->Items->Strings[j]).c_str());
boost::regex xRegEx (ExpressionText);
boost::smatch xResults;
std::string::const_iterator xItStart = stdLine.begin();
std::string::const_iterator xItEnd = stdLine.end();
if ((boost::regex_search(xItStart, xItEnd, xResults, xRegEx)) && (sizeof(xResults) > 1)) {
StringGrid1->Cells[j+1][i+1] = "Определен";
}
else StringGrid1->Cells[j+1][i+1] = "Не определен";
stdLine.clear();
ExpressionText.clear();
}
delete httpMemo;
httpBrowse->Disconnect();
delete httpBrowse;
}
Использую XE7
Записан
ДмитрийЛАСТ
Участник


Сказали спасибо: +3/-0
Offline

Сообщений: 11


Re: Парсинг сайтов
« Ответ #1 : 26 Март 2015, 12:22:41 »

Цитировать
И, непонятная проблема. Если на одном из сайтов текст найден, то он находится и на всех остальных, хотя там его нет.

Нашел ошибку. Я ссылался всегда на один и тот же адрес.
Вот вопрос Как определить ссылку, и выйти по ней? Остается открытым.
Спасибо!
Записан
ДмитрийЛАСТ
Участник


Сказали спасибо: +3/-0
Offline

Сообщений: 11


« Ответ #2 : 30 Март 2015, 18:54:24 »

Здравствуйте! Подскажите пожалуйста, почему ниже приведенный код не считает все ссылки?
Как минимум одной ссылки не выдает.
Код:
String HtmlMemoText = httpmemo.SubString(0, positionText);
std::string stdLine(AnsiString(HtmlMemoText).c_str());
std::string ExpressionText("href=");
boost::regex xRegEx (ExpressionText);
boost::smatch xResults;
std::string::const_iterator xItStart = stdLine.begin();
std::string::const_iterator xItEnd = stdLine.end();
int pos = 0;
int max_pos = 0;
std::string found;
while (((boost::regex_search(xItStart, xItEnd, xResults, xRegEx))) && (pos != positionText)){
found.assign(xResults[0]);
pos += xResults.position(0);
if (pos > max_pos) max_pos = pos;
xItStart = xResults[1].second;
}
String HtmlMemoText_T = HtmlMemoText.SubString(max_pos, HtmlMemoText.Length());
max_pos = HtmlMemoText_T.Pos("href");
AnsiString itogova = "";
AnsiString HtmlMemoText_ = HtmlMemoText_T;
char *lastsymbol = HtmlMemoText_.c_str();
char *skobka = "\"";
int nn = strlen(lastsymbol);
for (int i = max_pos + 5; i if (lastsymbol[i] != *skobka) {
itogova = itogova + lastsymbol[i];
}
else break;
}
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.075 секунд. Запросов: 21.