2 / 2 / 1
Регистрация: 16.02.2020
Сообщений: 73

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

04.08.2020, 10:31. Показов 6464. Ответов 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
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 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
2690 / 1347 / 485
Регистрация: 08.11.2016
Сообщений: 3,740
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
2690 / 1347 / 485
Регистрация: 08.11.2016
Сообщений: 3,740
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
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 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
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
07.08.2020, 11:41
Цитата Сообщение от XLAT Посмотреть сообщение
аккуратность и опять же внимание
на втором скрине должно быть
C:\my_project\ext\include
так я перенёс include карла в папку ext

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

во как.
1
 Аватар для Annemesski
2690 / 1347 / 485
Регистрация: 08.11.2016
Сообщений: 3,740
07.08.2020, 11:52
Цитата Сообщение от XLAT Посмотреть сообщение
во как.
Тогда путь к либе должен выглядеть как-то так:
build\x64\VC12\DLL Relese - DLL OpenSSL - DLL LibSSH2
0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 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
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru