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

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

04.08.2020, 10:31. Показов 6353. Ответов 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
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
06.08.2020, 10:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от polakware Посмотреть сообщение
И выдало такую ошибку:
вспомнилось чёто
был у меня такой случай(и даже не один раз):
студент спрашивает почему его код выдаёт ошибку,
я ему отвечаю исправленным от ошибки кодом,
он мне: твой код тоже не рабочий и вот в нем такая ошибка,
я ему: покажи что ты компилировал - полностью код.
он показывает тот код, что у него в шапке треда.

я ему объясняю про копипасту, как ей пользоваться и ещё горсть ссылок на ответы которые там же в треде.
он мне снова: оно опять с ошибкой,
и так по кругу.

в итоге всё обошлось хеппиендом, однако.
Однако.



Цитата Сообщение от XLAT Посмотреть сообщение
магия такая:
Пролог.
Вы можете экспериментировать как угодно,
и какая то часть ваших экспериментов будет успешна, а какая то провальна,
но давайте щас тупо скомпилируем cURL либу с поддержкой SSL не отвлекаясь
на типа "Я И ТАК ТУТ ВСЁ ЗНАЮ и сделаю по своему"


Пункт 1: С чистого листа.
Цитата Сообщение от polakware Посмотреть сообщение
Этот curl-7.71.1.zip
всё старое удалите и заново распакуйте, для чистоты эксперимента ...

Пункт 2: Проект.
Цитата Сообщение от XLAT Посмотреть сообщение
В проектах выбираем curl-7.71.1\projects\Windows\VC15
В проектах выбираем curl-7.71.1\projects\Windows\VC15 !
да, там будет два проекта консольный карл и собсно интересующий нас проект с либой libcurl
Проект curl можно ваще удалить: в контексте нашей цели он нам на данном этапе НЕ НУЖЕН.
Нас будет интересовать только проект libcurl!
Поэтому возьмите его в фокус!
и перейдите к выбору конфигурации.

Пункт 3: Конфигурациия.
Конфигурациия:
1. Выставляем LIB Realese LIB OpenSSL
2. Выставляем x64

если попробовать компильнуть, то выскочат ошибки компиляции о не найденных хедерах SSL:
поэтому переходим к установке SSL

Пункт 4: Установка SSL.
Установить SSL или любой другой пакидж можно в каком угодно солюшене и в каком угодно проекте.
Единственное неудобство, если действовать хаотично, то он загрузится в тот проект солюшена,
который у вас будет открыт во время загрузки, а он может и не требовать данную либу,
тогда для порядка придётся лапками переносить куда положено.

Но, внимание! использовать его можно будет любым, каким угодно проектом, которому он будет необходим.

откуда грузил его я, смотрите на скрине выше по треду.


Пункт 5: Настройка путей
Настраиваем пути к инклуду и либе SSL.
тут опять же ничего нового, это вы уже проделывали когда то по иным поводам:
пути должны выглядеть так:
(для скорости я не заморачивался с относительными путями и задал их от корня)
C:\curl-7.71.1\3\packages\OpenSSL110g_Static_vc1 40_MD.1.1.0\build\native\x64\include
C:\curl-7.71.1\3\packages\OpenSSL110g_Static_vc1 40_MD.1.1.0\build\native\x64\lib


Пункт 6: Компиялция либы.

я компили статик вариант либы,
вставлял макрос и ещё тыкал возможно что-то, щас уже не помню, сорри.

вот итоговый вариант libcurl с SSL мною скомпилинный:
в студии VS2019 я выбрал тулсет 140(...)
libcurl -- [Realsex64][Toolset140].rar
версия Realese, разрядность x64
этих параметров важно придерживаться, когда будете запускать тест!

Пункт 7: Тест.
Самое важное это опять и снова указать правильные пути к либе и инклудам.
инклуды берутся от curl-7.71.1
а либа это та, что мы тока што скомпили.

Пункт 8.
если возникнут вопросы,
мне не составит труда на них ответить.
1
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
06.08.2020, 19:24  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
Пункт 8.
если возникнут вопросы,
мне не составит труда на них ответить.
Скомпилировал, поместил в корень решения и в компоновщике прописал путь до сбилженного либа(скрин 1), инклюд тоже есть, но при компиляции проекта моего выдает эти ошибки:
Code
1
2
3
4
5
6
7
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка    LNK2001 неразрешенный внешний символ "__imp_curl_easy_cleanup"    CURLTest    C:\Users\dkari\source\repos\CURLTest\CURLTest\main.obj  1   
Ошибка    LNK2001 неразрешенный внешний символ "__imp_curl_easy_init"   CURLTest    C:\Users\dkari\source\repos\CURLTest\CURLTest\main.obj  1   
Ошибка    LNK2001 неразрешенный внешний символ "__imp_curl_easy_perform"    CURLTest    C:\Users\dkari\source\repos\CURLTest\CURLTest\main.obj  1   
Ошибка    LNK2001 неразрешенный внешний символ "__imp_curl_easy_setopt" CURLTest    C:\Users\dkari\source\repos\CURLTest\CURLTest\main.obj  1   
Ошибка    LNK2001 неразрешенный внешний символ "__imp_curl_easy_strerror"   CURLTest    C:\Users\dkari\source\repos\CURLTest\CURLTest\main.obj  1   
Ошибка    LNK1120 неразрешенных внешних элементов: 5 CURLTest    C:\Users\dkari\source\repos\CURLTest\x64\Release\CURLTest.exe   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
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.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
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
06.08.2020, 19:27  [ТС]
скрин либ
Миниатюры
Как можно спарсить страницу и получить описание?  
0
 Аватар для Annemesski
2689 / 1346 / 485
Регистрация: 08.11.2016
Сообщений: 3,734
07.08.2020, 07:24
polakware, компоновщик -> ввод -> дополнительные зависимости - добавить libcurl.lib
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
07.08.2020, 10:32  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
polakware, компоновщик -> ввод -> дополнительные зависимости - добавить libcurl.lib
Не помогло
0
 Аватар для Annemesski
2689 / 1346 / 485
Регистрация: 08.11.2016
Сообщений: 3,734
07.08.2020, 10:41
polakware, проверьте по пути указанному в Additional library paths (Дополнительные каталоги библиотек) для curl какие там лежат файлы *.lib там должен быть файл на подобии libcurl.lib или libcurl64.lib или curl.lib или что-то в этом духе, его название надо прописать в Linker/Input/Additional dependecies (Компоновщик/Ввод/Дополнительные зависимости)

Путь, по идее, не к каталогу "lib", а скорее всего (если вы сами собирали curl) к каталогу "DLL Release"
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
07.08.2020, 11:16  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
Путь, по идее, не к каталогу "lib", а скорее всего (если вы сами собирали curl) к каталогу "DLL Release"
Да я ошибся в пути, но все равно не помогло, ошибки такие же
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
07.08.2020, 11:33
Лучший ответ Сообщение было отмечено polakware как решение

Решение

Цитата Сообщение от polakware Посмотреть сообщение
скрин либ
полагаю, что вы уже скомпилили карла с SSL, переходим к тесту:

1. Скомпилил с вашим исходником, при запуске SSL требует сертификаты.
2. Поэтому используйте для теста мою версию
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
///----------------------------------------------------------------------------|
/// Внимание!
/// Работоспособность проверена в среде VS2019(Toolset 140)
///                                   и VS2019(LLVM clang-cl)
///----------------------------------------------------------------------------:
#define _CRT_SECURE_NO_WARNINGS
#define CURL_STATICLIB
 
///-----------------------------------------------------------|
/// Зависимости.
///-----------------------------------------------------------:
#pragma comment( lib, "ws2_32.lib" )
#pragma comment( lib, "Wldap32.lib" )
#pragma comment (lib, "libcrypto64MT.lib")
#pragma comment (lib, "libssl64MT.lib")
#pragma comment (lib, "Crypt32.lib")
 
///-----------------------------------------------------------|
/// Скомпиленная наша либа.
///-----------------------------------------------------------:
#pragma comment (lib, "libcurl_140_x64_Release_Static.lib")
 
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <curl/curl.h>
 
///-----------------------------------------------------------|
/// Взято отсюда:
/// https://stackoverflow.com/questions/30412951/unresolved
///      -external-symbol-imp-fprintf-and-imp-iob-func-sdl2
///-----------------------------------------------------------:
#pragma comment (lib, "legacy_stdio_definitions.lib")
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }
 
#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;
}
3. Проект с нуля(структура):
Code
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
Структура папок:
C:\my_project\
+---ext
|   +---include                                <<<--- Взять из curl-7.71.1
|   |   \---curl 
|   |           curl.h
|   |           curlver.h
|   |           easy.h
|   |           Makefile.am
|   |           Makefile.in
|   |           mprintf.h
|   |           multi.h
|   |           stdcheaders.h
|   |           system.h
|   |           typecheck-gcc.h
|   |           urlapi.h
|   |           
|   \---lib
|       |   libcurl_140_x64_Release_Static.lib <<<--- Скомпиленная либа!
|       |   libcrypto64MT.lib                  <<<--- Взять из пакиджа!
|       \---libssl64MT.lib                     <<<--'
|               
\---my
    |   my.cpp                                 <<<--- Исходник!
    |   my.sln
    |   my.vcxproj
    |   my.vcxproj.filters
    |   my.vcxproj.user
    |   
    +---bin
            my.exe
my.exe ютутб грузит.

4. Настройки билда:







5. Готовая либа:
ext.rar
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
07.08.2020, 11:41
Цитата Сообщение от XLAT Посмотреть сообщение
аккуратность и опять же внимание
на втором скрине должно быть
C:\my_project\ext\include
так я перенёс include карла в папку ext

но это мелочь, однако аккуратности мне тоже мало не бывает
0
 Аватар для Annemesski
2689 / 1346 / 485
Регистрация: 08.11.2016
Сообщений: 3,734
07.08.2020, 11:42
polakware, вероятнее всего Вы скомпилировали libcurl под win32 и пытаетесь использовать её в конфигурации x64.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
07.08.2020, 11:47
Цитата Сообщение от Annemesski Посмотреть сообщение
вероятнее всего Вы скомпилировали libcurl под win32 и пытаетесь использовать её в конфигурации x64.
вы повершкам идёте:
автора уже давно не интересует голый cURL,
автору нужен cURL cо встроенной поддержкой SSL,
для загрузки ЗАШИФРОВАННЫХ страниц.

во как.
1
 Аватар для Annemesski
2689 / 1346 / 485
Регистрация: 08.11.2016
Сообщений: 3,734
07.08.2020, 11:52
Цитата Сообщение от XLAT Посмотреть сообщение
во как.
Тогда путь к либе должен выглядеть как-то так:
build\x64\VC12\DLL Relese - DLL OpenSSL - DLL LibSSH2
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
07.08.2020, 13:21
проверил(OS: win7) с родным для VS2019 тулсетом 142

полёт нормальный.
1
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
07.08.2020, 13:27  [ТС]
Спасибо, проблема решена!
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
09.08.2020, 10:37
Цитата Сообщение от polakware Посмотреть сообщение
Спасибо, проблема решена!
это даже не проблема, проблема была парсить страницу, вы же получите не страницу а исходный "индекс" хтмл
а будет ли что там парсить - зависит от реализации сайта
1
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
09.08.2020, 19:29
Цитата Сообщение от SmallEvil Посмотреть сообщение
проблема была парсить страницу
И в чем проблема, собственно? Сервер всё равно отдаст содержимое для этой страницы, если не в html, то в одном из других форматов.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
09.08.2020, 23:40
Цитата Сообщение от Nishen Посмотреть сообщение
И в чем проблема, собственно?
если страница формируется через яваскрипт - curl будет бесполезен

Добавлено через 1 минуту
Цитата Сообщение от Nishen Посмотреть сообщение
если не в html,
страница приходит всегда в HTML формате (ну я других не видел)
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
09.08.2020, 23:55
Цитата Сообщение от Nishen Посмотреть сообщение
содержимое для этой страницы
, а не
Цитата Сообщение от SmallEvil Посмотреть сообщение
страница
0
2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73
18.10.2020, 16:30  [ТС]
XLAT, не знаю что произошло, не компилирует, по готовой либе тоже
Миниатюры
Как можно спарсить страницу и получить описание?   Как можно спарсить страницу и получить описание?  
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
18.10.2020, 17:02
Цитата Сообщение от polakware Посмотреть сообщение
не знаю что произошло
Маринер-1 должен был направиться к Венере,
но был уничтожен во время аварии на старте 22 июля 1962 года через 293 секунды после старта.

Есть две версии причины аварии:
это пропущенный дефис и вторая версия пропущенная запятая в программе на Фортране, которая управляла стартом

как видите ваш случай и не такой уж и страшный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2020, 17:02

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

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;...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru