Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73

Как можно спарсить страницу и получить описание?

04.08.2020, 10:31. Показов 6753. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать парсер описания каналов ютуб и желательно получать свой текст с помощью регулярок. Например https://www.youtube.com/user/PewDiePie/about

Какие библиотеки помогут в этом деле?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2020, 10:31
Ответы с готовыми решениями:

Каким методом можно спарсить такую страницу?
Вот страничка - https://live.fonbet.com/?locale=ru#1

Как спарсить HTML страницу?
Вот скриншот Нужно получить "Производитель" и "Toyota", хелп

Как спарсить целую страницу и со стилями
вот удалось спарсить страницу но она выводится без стилевого оформления. Есть ли возможность спарсить страницу вместе с стилевым...

61
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 18:19  [ТС]
Студворк — интернет-сервис помощи студентам
Есть еще парсеры html страницы желательно по атрибутам? Как https://simplehtmldom.sourceforge.io/manual.htm
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 18:21
ха,
про написание документации автору никто не рассказывал,
либо он делал для себя на пару запусков,
либо для кого-то, но так, чтобы его не забывали.

вот это и есть типичный гуанокод.
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 18:32  [ТС]
А как этот код в функцию превратить и вызывать ее так?
C++
1
2
3
4
5
int main(){
cout << "Введите ссылку на канал" << endl;
cin >> link;
getDescription(link);
}
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 18:37
Цитата Сообщение от polakware Посмотреть сообщение
А как этот код в функцию превратить и вызывать ее так?
C++
1
2
3
4
5
6
7
8
9
int main_xxx()
{   cout << "Введите ссылку на канал" << endl;
    cin >> link;
    getDescription(link);
}
 
int main()
{   main_xxx();
}
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 18:39  [ТС]
Не этот, а который вы кинули с сохранением исходного кода сайта
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 18:44
Цитата Сообщение от polakware Посмотреть сообщение
который вы кинули
а вы ютубом там разобрались?
у меня там галиматью грузит как раз с ютуба.

киберфорумом же всё нормально загружается.

Цитата Сообщение от polakware Посмотреть сообщение
Не этот
переименуйте там main() по вкусу и вызывайте где захочется.
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 18:45  [ТС]
У меня не вся страница поместилась в файл, только часть. С курлом еще не разобрался, там выдает Unsupported protocol. Эту ошибку я пытался фиксить добавив в солюшн курла либы и инклюды опенссла, но ничего не вышло
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 18:51
Цитата Сообщение от polakware Посмотреть сообщение
но ничего не вышло
придётся возвращаться к nmake,
вроде он там согласно мануалу может потебно конфигурировать чуть ли не из коропки.

я чуть позже посмотрю.

Добавлено через 1 минуту
Цитата Сообщение от polakware Посмотреть сообщение
У меня не вся страница поместилась в файл, только часть.
млин. я аж не верю.
у меня галиматья такая что ничто не распарсит
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 19:36  [ТС]
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl_gssapi.c
        cl /O2 /DNDEBUG /MD /DCURL_STATICLIB /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /DUSE_OPENSSL /I"../../deps/include\openssl"  /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES  /DUSE_IPV6  /DUSE_WINDOWS_SSPI /Fo"..\builds\libcurl-vc-x86-release-static-ssl-static-ipv6-sspi-obj-lib/curl_memrchr.obj"  ..\lib\curl_memrchr.c
curl_memrchr.c
        cl /O2 /DNDEBUG /MD /DCURL_STATICLIB /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /DUSE_OPENSSL /I"../../deps/include\openssl"  /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES  /DUSE_IPV6  /DUSE_WINDOWS_SSPI /Fo"..\builds\libcurl-vc-x86-release-static-ssl-static-ipv6-sspi-obj-lib/curl_multibyte.obj"  ..\lib\curl_multibyte.c
curl_multibyte.c
        cl /O2 /DNDEBUG /MD /DCURL_STATICLIB /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /DUSE_OPENSSL /I"../../deps/include\openssl"  /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES  /DUSE_IPV6  /DUSE_WINDOWS_SSPI /Fo"..\builds\libcurl-vc-x86-release-static-ssl-static-ipv6-sspi-obj-lib/curl_ntlm_core.obj"  ..\lib\curl_ntlm_core.c
curl_ntlm_core.c
..\lib\curl_ntlm_core.c(61): fatal error C1083: Не удается открыть файл включение: openssl/des.h: No such file or directory,
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\cl.EXE" : возвращенный код "0x2"
Stop.
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\nmake.exe" : возвращенный код "0x2"
Stop.
 
C:\Users\dkari\Desktop\curl-7.71.1\winbuild>


Добавлено через 4 минуты
Все понял, не указал WITH_DEVIL Опенссла

Добавлено через 1 минуту
Code
1
2
3
4
5
LINK : fatal error LNK1181: не удается открыть входной файл "libeay32.lib"
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\link.exe" : возвращенный код "0x49d"
Stop.
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\nmake.exe" : возвращенный код "0x2"
Stop.
И появилась другая ошибка

Добавлено через 36 минут
Кто компилил курл с ссл через nmake, где вы качали опенссл, может у меня не то скачано?
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
04.08.2020, 19:48
Цитата Сообщение от polakware Посмотреть сообщение
Эту ошибку я пытался фиксить добавив в солюшн курла либы и инклюды опенссла
Зачем в проект добавлять директрию OpenSSL? Нужно библиотеку собрать, а при сборке указать параметр и дать для этого параметра путь до OpenSSL.

Добавлено через 3 минуты
В исходных файлах есть папка winbuild. В ней файл BUILD.WINDOWS.txt, почитай.

Добавлено через 15 секунд
В исходных файлах есть папка winbuild. В ней файл BUILD.WINDOWS.txt, почитай.
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 19:54  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
В исходных файлах есть папка winbuild. В ней файл BUILD.WINDOWS.txt, почитай.
Code
1
2
3
4
5
6
7
Copying libs...
[S]NMAKE : fatal error U1073: не хватает сведений для построения "..\src\tool_hugehelp.c"
Stop.
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\nmake.exe" : возвращенный код "0x2"
Stop.
 
C:\Users\dkari\Desktop\git\curl\winbuild>[/S]


В deps это https://windows.php.net/downlo... 16-x86.zip


UPD: исправил https://github.com/curl/curl/issues/1724
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 20:00
Цитата Сообщение от polakware Посмотреть сообщение
И появилась другая ошибка
чтобы ютуб загрузить, вот тут проделал такую магию:

все магические действия делал повторяя за автором этого видео:
1
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 20:05  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
В исходных файлах есть папка winbuild. В ней файл BUILD.WINDOWS.txt, почитай.
Вышел файл в git\curl\builds\libcurl-vc-x86-release-static-ssl-static-ipv6-sspi\[bin,include,lib], добавил инклюд и либ куда надо и появилась такая ошибка, скорее всего что-то неправильно.
Code
1
2
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка    LNK2001 неразрешенный внешний символ "__imp_curl_easy_init"   CURLTest    C:\Users\dkari\source\repos\CURLTest\CURLTest\main.obj  1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <curl/curl.h>
 
 
 
size_t WriteCallback(char* contents, size_t size, size_t nmemb, void* userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}
 
int main() {
    CURL* curl;
    curl = curl_easy_init();
    std::string readBuffer;
 
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.googleapis.com/youtube/v3/channels?part=snippet&part=statistics&forUsername=pewdiepie&key=token");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
}
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 20:06
сырец моего теста:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
///----------------------------------------------------------------------------|
/// Использование cURL для доступа к HTTPS
///----------------------------------------------------------------------------|
#define CURL_STATICLIB
#pragma comment( lib, "ws2_32.lib" )
#pragma comment( lib, "Wldap32.lib" )
#pragma comment (lib, "libcurld.lib")
 
#include <iostream>
#include <string>
#include <curl/curl.h>
 
/// Фнкция, вызываемая cURL для записи полученых данных:
size_t curlWriteFunc(char* data, size_t size, size_t nmemb, std::string* buffer)
{
    size_t result = 0;
 
    if (buffer != NULL)
    {   buffer->append(data, size * nmemb);
        result = size * nmemb;
    }
    return result;
}
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main(int argc, char* argv[])
{
    std::string curlBuffer;
    // запрашиваемая страничка(путь до login screen)
    const char* url = "https://www.youtube.com/user/PewDiePie/about";
    // передаваемые параметры
    const char* urlPOST = "login=ИМЯ&password=ПАСС&cmd=login";
 
    // буфер для сохранения текстовых ошибок
    char curlErrorBuffer[CURL_ERROR_SIZE];
 
    CURL* curl = curl_easy_init();
 
    if (curl) 
    {
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);
 
        curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curlErrorBuffer);
 
        // задаем URL...
        curl_easy_setopt(curl, CURLOPT_URL, url);
        // переходить по "Location:" указаному в HTTP заголовке  
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
        // не проверять сертификат удаленного сервера
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
        // использовать метод POST для отправки данных
        curl_easy_setopt(curl, CURLOPT_POST, 1);
        // параметры POST
        //curl_easy_setopt(curl, CURLOPT_POSTFIELDS, urlPOST);
        // функция, вызываемая cURL для записи полученых данных
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &curlBuffer);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriteFunc);
 
        // выполнить запрос
        CURLcode curlResult = curl_easy_perform(curl);
        // завершение сеанса
        curl_easy_cleanup(curl);
 
        if (curlResult == CURLE_OK)
        {   std::cout << curlBuffer << std::endl;
 
        }
        else 
        {   std::cout << "Ошибка(" << curlResult << "): " 
                      << curlErrorBuffer << std::endl;
            std::cin.get();
            return(-1);
        }
    }
 
    std::cin.get();
    return 0;
}
1
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
04.08.2020, 20:09  [ТС]
XLAT, спасибо, но лучше подключу курл с ssl
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
04.08.2020, 21:07
Цитата Сообщение от polakware Посмотреть сообщение
курл с ssl
магия такая:
1. Качаем исходники карла curl-7.71.1.zip и распаковываем.
2. В проектах выбираем curl-7.71.1\projects\Windows\VC15
3. Конфигурация:

4. Качаем OpenSSL Nupkg-манегером (в студии(2019) во вкладе Tools):

5. Настраиваем пути на скаченный и установленный пакидж.
5.1 Внимание: тут главное прямые лапки аккуратность и опять же внимание(тельность).
6. Компилим либу на ура:


7. Далее тест(код тот же: см. выше по треду).
8. Настраиваем пути на скомпиленную либу и инклуд из карла.
8.1 Внимание: тут главное аккуратность и опять же внимание(тельность).
...
9. Всё работает!!!
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
05.08.2020, 10:27  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
В проектах выбираем curl-7.71.1\projects\Windows\VC15
Открыл curl-all.sln, но у меня там только два проекта(curl, libcurl), а у вас больше.
И выдало такую ошибку:
Code
1
2
3
4
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка    LNK1181 не удается открыть входной файл "libcurl.lib"    curl    C:\Users\dkari\Desktop\curl-7.71.1\projects\Windows\VC15\src\LINK   1   
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка    LNK1181 не удается открыть входной файл "libeay32.lib"   libcurl C:\Users\dkari\Desktop\curl-7.71.1\projects\Windows\VC15\lib\LINK   1
Добавлено через 1 минуту
Цитата Сообщение от XLAT Посмотреть сообщение
3. Конфигурация:
А там где проекты ALL_BUILD, curl, install нет конфигураций как у вас на скрине
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
05.08.2020, 10:38  [ТС]
Также unsupported protocol

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <curl/curl.h>
 
#pragma comment (lib, "libcurl_imp.lib")
 
 
using namespace std;
 
size_t WriteCallback(char* contents, size_t size, size_t nmemb, void* userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}
 
int main() {
    CURL* curl;
    CURLcode res;
 
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://youtube.com/user/PewDiePie/about");
        /* example.com is redirected, so we tell libcurl to follow redirection */
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 
        /* Perform the request, res will get the return code */
        res = curl_easy_perform(curl);
        /* Check for errors */
        if (res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                curl_easy_strerror(res));
 
        /* always cleanup */
        curl_easy_cleanup(curl);
    }
    return 0;
}
Миниатюры
Как можно спарсить страницу и получить описание?   Как можно спарсить страницу и получить описание?  
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
05.08.2020, 12:15
Цитата Сообщение от polakware Посмотреть сообщение
Может на апи легче будет
Легче будет через ActiveX (IE), получите почти нормальную страницу с готовым DOMом.

Добавлено через 2 минуты
Цитата Сообщение от polakware Посмотреть сообщение
Также unsupported protocol
Вы скачали другой curl ?
мой libcurl 7.71.1 x64
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
05.08.2020, 14:34  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вы скачали другой curl ?
мой libcurl 7.71.1 x64
Этот https://curl.haxx.se/download/curl-7.71.1.zip
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2020, 14:34

Как спарсить страницу, типа авторизовавшись?
Здравствуйте товарищи!!! Помогите пожалуйста. Такая проблема: нужно получить страницу с сайта. Получать будем функцией ...

Synapse: Как спарсить страницу HTTPS?
Как спарсить страницу HTTPS, https://vk.com, например? С помощью HttpGetText не парсит

Как можно спарсить курсы крипты?
Как можно спарсить курсы криптовалют с таких площадок как: 1. https://blockchain.info/ru/api/exchange_rates_api 2....

Спарсить страницу
Всем привет) давно не заходил, нужна ваша помощь) procedure TForm1.Button1Click(Sender: TObject); var ip: string; begin ...

Спарсить страницу
Есть ли функция на подобие file_get_cintents(), которая сразу разбивает текст по блокам? Пример: &lt;!-- @html --&gt; &lt;html&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru