Author Topic: Нужна помощь. Поиск символа в строке  (Read 4449 times)

0 Members and 1 Guest are viewing this topic.

shef4ig

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Нужна помощь. Поиск символа в строке
« on: September 18, 2017, 06:17:45 PM »
Всем привет, и заранее спасибо.
Изначально стоит задача брать из файла логины в инсте, подставлять в хвост ссылки. Потом заходить на страницу и вытягивать оттуда количество подписчиков, подписок и количество постов. Все это помещать в екселевский файл по датам и логинам соответственно.

С первым этапом справился как мог))) через ctrl +U в браузере перехожу на страницу с кодом.ю там нахожу параметр "meta content" кликаю на него 2 раза и загоняю в буфер и в файл соответственно. вот как выглядит результат в файле (есть проверка на несуществующие аки):

"/shef4ig/" /><meta content="100 подписчиков, 114 подписок, 116 публикаций — посмотрите в Instagram ф"
"/darya_andr22/" /><meta content="822 подписчиков, 3,872 подписок, 81 публикаций — посмотрите в Insta"
"/sofiya_min23/" /><meta content="1,078 подписчиков, 4,554 подписок, 81 публикаций — посмотрите в Ins"
"shef4ig1"+"invalid"

 Теперь задача взять строку и из нее вытянуть 3 цифры: количество подписчиков, подписок и постов и загнать в эксель в 3 колонки с привязкой к дате (первая строка файла: дата).


shef4ig

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #1 on: September 18, 2017, 07:54:50 PM »
как найти и занести в файл количество подписчиков, с остальным я худо-бедно разберусь

tmp~1

  • Освоившийся
  • **
  • Posts: 31
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #2 on: September 18, 2017, 09:25:41 PM »
Clickermann v4.13 x32
Code: (clickermann) [Select]
IF(TFCOUNT("output.txt") = 0) // если выходной файл пуст, вставляем в него заголовки колонок
   TFWRITE("output.txt", "Пользователь Подписчиков Подписок Публикаций") //
END_IF

TFREADARR("input.txt", $arr)  // загружаем из входного файла данные в массив

$arr_size = ARRSIZE($arr) // размер массива

FOR($i = 0, $i < $arr_size) // перебираем все строки массива
   
   IF(STRPOS($arr[$i], "content=") != 0) // берем только строки содержащие фразу "content="
     
      $nickname = STRCUT2($arr[$i], 3, STRPOS($arr[$i], "/><meta") - 4) // имя пользователя
     
      $content = STRCUT2($arr[$i], STRPOS($arr[$i], "content=") + 9, STRPOS($arr[$i], "публикаций") + 9) // контент
      $content = STRREPLACE($content, " подписчиков, ", " ") // меняем запятую на разделитель, например на табулятор
      $content = STRREPLACE($content, " подписок, ", " ")
      $content = STRREPLACE($content, "публикаций", "") // вырезаем из контента мусор
     
      TFWRITE("output.txt", STRCONCAT($nickname, " ", $content)) // собираем выходную строку и записываем ее в файл
     
   END_IF
   
END_CYC

HALT

// Импортируем файл "output.txt" в Excel. Вкладка "Данные" ==> Из текста...
// Дальше как обычно. Разделитель - знак табуляции.
// Файл сохраняем. И настраиваем автоматический импорт. Кнопка "Обновить все" ==> Свойства подключения.
« Last Edit: September 18, 2017, 09:28:08 PM by tmp~1 »

shef4ig

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #3 on: September 18, 2017, 11:07:56 PM »
Clickermann v4.13 x32
Code: (clickermann) [Select]
IF(TFCOUNT("output.txt") = 0) // если выходной файл пуст, вставляем в него заголовки колонок
   TFWRITE("output.txt", "Пользователь Подписчиков Подписок Публикаций") //
END_IF

TFREADARR("input.txt", $arr)  // загружаем из входного файла данные в массив

$arr_size = ARRSIZE($arr) // размер массива

FOR($i = 0, $i < $arr_size) // перебираем все строки массива
   
   IF(STRPOS($arr[$i], "content=") != 0) // берем только строки содержащие фразу "content="
     
      $nickname = STRCUT2($arr[$i], 3, STRPOS($arr[$i], "/><meta") - 4) // имя пользователя
     
      $content = STRCUT2($arr[$i], STRPOS($arr[$i], "content=") + 9, STRPOS($arr[$i], "публикаций") + 9) // контент
      $content = STRREPLACE($content, " подписчиков, ", " ") // меняем запятую на разделитель, например на табулятор
      $content = STRREPLACE($content, " подписок, ", " ")
      $content = STRREPLACE($content, "публикаций", "") // вырезаем из контента мусор
     
      TFWRITE("output.txt", STRCONCAT($nickname, " ", $content)) // собираем выходную строку и записываем ее в файл
     
   END_IF
   
END_CYC

HALT

// Импортируем файл "output.txt" в Excel. Вкладка "Данные" ==> Из текста...
// Дальше как обычно. Разделитель - знак табуляции.
// Файл сохраняем. И настраиваем автоматический импорт. Кнопка "Обновить все" ==> Свойства подключения.


Спасибо, попробывал запустить на 4.12 не сработало, завтра буду ковыряться - искать - в чем там проблема. Сам подход понял, буду эксперементировать

Axelenz

  • Освоившийся
  • **
  • Posts: 31
  • Парсинг сайтов, наполнение интернет-магазинов
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #4 on: September 19, 2017, 12:50:58 AM »
Quote
всё это реально, кроме формата  эксель, Clickermann обучен работать с форматом .txt

Рекомендую работать с форматом .csv вместо .txt. И "Открывать с помощью" Excel. Именно так и поступаю в подобных случаях.
Но я всегда создаю два файла: .txt (он как исходник) и .csv, который дальше коверкается формулами до неузнаваемости... 
"Можно бесконечно смотреть на три вещи: как течёт вода, как горит огонь и как Clickermann работает вместо тебя..."

shef4ig

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #5 on: September 19, 2017, 08:47:57 AM »
Clickermann v4.13 x32
версию программы неверно указали 4.13.004b x32, во всех более ранних 4.13 ваши художества работать не будут.

я не нахожу в инете этой версии программы

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #6 on: September 19, 2017, 09:12:27 AM »
Рекомендую работать с форматом .csv вместо .txt. И "Открывать с помощью" Excel.
И правильно учитываются экранированные разделители?
.csv от Microsoft программ друг друга не понимают. Сохраняешь как "csv разделитель запятые", на выходе - разделитель точка с запятой.
Перенос строк CRLF. Перенос строк внутри ячейки просто LF


tmp~1

  • Освоившийся
  • **
  • Posts: 31
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #7 on: September 19, 2017, 10:16:24 AM »
Quote
всё это реально, кроме формата  эксель, Clickermann обучен работать с форматом .txt

Рекомендую работать с форматом .csv вместо .txt. И "Открывать с помощью" Excel. Именно так и поступаю в подобных случаях.
Но я всегда создаю два файла: .txt (он как исходник) и .csv, который дальше коверкается формулами до неузнаваемости...

Да, действительно есть такой текстовый формат - .csv. :D  Я не додумался, сразу про авто-импорт в Ексель вспомнил почему-то, хотя на рабочем столе валяется ярлык программы Total CSV Converter, которую юзал долгое время по работе. Axelenz спасибо за подсказку. :) Нормально работает.
Жаль только что при открытом файле .csv в Екселе, кликер не может в него запись делать, ошибку выдает. С импортом такого не происходит, можно на ходу импортировать и сразу видеть текущее состояние базы. Вот и объединим оба способа. Если при импорте кликер и Ексель все таки встретятся, то может быть ошибка, но это тоже решаемо. Нормально получилось. :)

Axelenz

  • Освоившийся
  • **
  • Posts: 31
  • Парсинг сайтов, наполнение интернет-магазинов
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #8 on: September 19, 2017, 07:27:08 PM »
Quote
И правильно учитываются экранированные разделители?
.csv от Microsoft программ друг друга не понимают. Сохраняешь как "csv разделитель запятые", на выходе - разделитель точка с запятой.
Перенос строк CRLF. Перенос строк внутри ячейки просто LF

Я парсю текст с браузера. Разделителем текста в строке (для дальнейшей разбивки на столбцы в Excel) служит не ";" а "|". Хотя бы потому, что в моём тексте точка с запятой встречаются, да и в плане наглядности "|" намного лучший разделитель...
Дальше с текстом работаю в Excel исключительно с помощью "горячих" клавиш... Как пример, разделить текст:

Code: (clickermann) [Select]
excel:
//------------------------- Закрыть окна Clickermann и Cyberfox ----------------
WNDSTATE(WNDFIND("Редактор - C:\Clickermann\"), 0)
WAITMS(300)
WNDSTATE(WNDFIND("Cyberfox"), 0)
WAITMS(300)

//========================= ОБРАБОТКА ТЕКСТА В EXCEL ===========================
//------------------------- Открыть файл. Расширить окно. Назначить язык En -----
EXECUTE("input.csv")
WAIT(1)

WNDSETINFO(WNDFIND("input.csv - Excel"), 0, 0, 1440, 862)
WAIT(1)

SETKBLAYOUT(WNDFIND("input.csv - Excel"), 1033)
WAIT(1)
//------------------------- Вкладка Данные. Текст по столбцам ------------------
// выделить столбец до конца вниз
KEYDOWN(#CTRL)
WAITMS(50)
KEYDOWN(#SHIFT)
WAITMS(100)
KEYPRESS(#DOWN)
KEYUP(#SHIFT)
KEYUP(#CTRL)
WAIT(1)
// выбрать из закладки данные текст по столбцам
KEYDOWN(#ALT)
WAITMS(50)
KEYPRESS(192)
KEYUP(#ALT)
WAIT(1)
KEYPRESS(#9)
WAIT(1)

SETKBLAYOUT(WNDFIND("input.csv - Excel"), 1049)
WAIT(1)

KEYPRESS(#H)
WAITMS(300)
KEYPRESS(#TAB)
WAITMS(200)
KEYPRESS(#TAB)
WAITMS(300)
KEYPRESS(#ENTER)
WAIT(1)

KEYPRESS(#L)
WAITMS(500)
SETKBLAYOUT(WNDFIND("input.csv - Excel"), 1033)
WAIT(1)
KEYDOWN(#SHIFT)
WAITMS(50)
KEYPRESS(220)
KEYUP(#SHIFT)
WAIT(1)
KEYPRESS(#ENTER)
WAITMS(500)
KEYPRESS(#ENTER)
WAIT(1)
//------------------------- Перейти на стиль ссылок R1C1
KEYPRESS(#ALT)
WAIT(1)
KEYPRESS(65)
WAITMS(500)

KEYPRESS(#V)
WAIT(1)
KEYPRESS(#DOWN)
WAITMS(500)
KEYPRESS(#TAB)
WAITMS(300)
KEYPRESS(#1)
WAITMS(500)
KEYPRESS(#ENTER)
WAIT(1)

Ну понятно, что это всего лишь часть кода, весь код больше 500 строк... и в основном это конечно работа в Excel. Я перевёл решение всех однотипных нудных повторяющихся заданий на Автокликер, а дальше уже максимально обработанный файл всё равно приходится проверять.
Задержки большие, согласен, но при меньших может что-то не срабатывать, поэтому для себя дешевле посидеть лишнюю минуту и подождать, чем потом вылавливать косяки... (((

У меня это работает на Win 8.1 + Microsoft Office 2016.

Да... разделяю данные "|" перед записью в файл:

Code: (clickermann) [Select]
$str = TFCOUNT("in.txt")

   //------------------------- записать данные ---------------------------------
   $txt = "|"
 
   IF($str > 0)
      $i = 0
      FOR($n = 0, $n < $str)
         IF(STRLEN(STRREADLN("in.txt", 1)) > 2)
            $arr[$n] = STRREADLN("in.txt", 1)
            WAITMS(100)
            $txt = STRCONCAT($txt, $arr[$n], "|")
            WAITMS(100)
            END_IF
         ELSE
            $n = $n - 1
         END_IF
         TFDelete("in.txt", 1)
         WAITMS(100)
         INC($i)
         IF($i = $str)
            $n = $str
         END_IF
      END_CYC
     
      UNDEFINE($arr)

   END_IF
   
   $txt = STRCONCAT($p, "|", $art, "|", $url, "|", $pho, $txt)
   STRWRITELN("input.txt", $txt)
   WAITMS(200)
   STRWRITELN("input.csv", $txt)
   WAITMS(200)


Смысл приведённого примера:
Данные вначале записываются в файл in.txt который обрабатывается под Ваши нужды и дальше становится уже чистовой строкой для записи в другой файл input.txt (in.txt очищается при каждой итерации), в котором таких строк уже много, они и разделяются в дальнейшем на столбцы с помощью разделителя "|".
« Last Edit: September 19, 2017, 08:36:28 PM by Axelenz »
"Можно бесконечно смотреть на три вещи: как течёт вода, как горит огонь и как Clickermann работает вместо тебя..."

Axelenz

  • Освоившийся
  • **
  • Posts: 31
  • Парсинг сайтов, наполнение интернет-магазинов
    • View Profile
Re: Нужна помощь. Поиск символа в строке
« Reply #9 on: September 19, 2017, 07:54:19 PM »
Quote
Жаль только что при открытом файле .csv в Екселе, кликер не может в него запись делать, ошибку выдает.

В принципе, пару месяцев назад я именно так и делал, вёл запись с браузера, окно которого находилось сверху, непосредственно с помощью Автокликера в файл Excel (окно которого было открыто внизу) по строкам и столбцам, с помощью "горячих" клавиш, но когда насытился зрелищем "ух ты, как оно клёво работает", то перешёл на более быстрый и правильный способ писать всё сразу в два файла и потом издеваться уже над одним, всегда имея копию в .txt
Самый простой способ получить файл .csv из .txt - это конечно же просто изменить его расширение )))
"Можно бесконечно смотреть на три вещи: как течёт вода, как горит огонь и как Clickermann работает вместо тебя..."