Yandex.ru serp parser - парсер выдачи яндекса на с++ Code: #include <stdio.h> #include <curl/curl.h> #include <string> using namespace std; #include <wx/stattext.h> #include <wx/wx.h> ////// size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written = fwrite(ptr, size, nmemb, stream); return written; } int http_request() { for(int i {1}; i < 4; i++) { char nameOfFile[12]; sprintf(nameOfFile, "%d.html",i); CURL *curl = curl_easy_init(); if(curl) { const char *data1 = "?text=music&search_source=dzen_desktop_safe&lr=65&p=5"; CURLcode res; FILE *fp; curl_easy_setopt(curl, CURLOPT_URL, "https://yandex.ru/search"); curl_easy_setopt (curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0"); /* size of the POST data */ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(data1)); /* pass in a pointer to the data - libcurl will not copy */ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data1); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); fp = fopen(nameOfFile,"wb"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); /* 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)); } curl_easy_perform(curl); sleep(2); } return 0; } /////// class MyApp : public wxApp { public: bool OnInit() override; }; wxIMPLEMENT_APP(MyApp); class MyFrame : public wxFrame { public: MyFrame(); private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnButton1Click1(wxCommandEvent& event); }; enum { ID_Hello = 1, ID_NAME_TEXTCTRL_EX = 11001, ID_AGE_SPINCTRL_EX, ID_SALARY_TEXTCTRL_EX, ID_MARITAL_CHECKBOX_EX, ID_SKILLS_LISTBOX_EX }; bool MyApp::OnInit() { MyFrame *frame = new MyFrame(); frame->Show(true); return true; } void MyFrame::OnButton1Click1(wxCommandEvent& event){ wxMessageBox("This is a wxWidgets Hello World example", "About Hello World", wxOK | wxICON_INFORMATION); } MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Hello World") { wxMenu *menuFile = new wxMenu; menuFile->Append(ID_Hello, "&Parsing page...\tCtrl-H", "Help string shown in status bar for this menu item"); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT); wxMenu *menuHelp = new wxMenu; menuHelp->Append(wxID_ABOUT); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append(menuFile, "&File"); menuBar->Append(menuHelp, "&Help"); SetMenuBar( menuBar ); wxString *m_text = new wxString; m_text->Append("sfs12312"); // label wxStaticText * name_label = new wxStaticText(this, wxID_ANY, _("Name:")); // input wxTextCtrl * name_textctrl = new wxTextCtrl(this, ID_NAME_TEXTCTRL_EX, wxEmptyString, wxDefaultPosition, wxSize(150,40)); // listBox wxArrayString skills; skills.Add(wxT("C/C++")); skills.Add(wxT("C#")); skills.Add(wxT("Delphi")); skills.Add(wxT("Visual Basic")); skills.Add(wxT("ASP.NET")); skills.Add(wxT("SQL")); wxListBox * skills_listbox = new wxListBox(this, ID_MARITAL_CHECKBOX_EX, wxDefaultPosition, wxDefaultSize, skills, wxLB_MULTIPLE); // menu Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello); Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT); } void MyFrame::OnExit(wxCommandEvent& event) { Close(true); } void MyFrame::OnAbout(wxCommandEvent& event) { wxMessageBox("This is a wxWidgets Hello World example", "About Hello World", wxOK | wxICON_INFORMATION); } void MyFrame::OnHello(wxCommandEvent& event) { wxLogMessage("Page loaded"); http_request(); } компилируется на убунту 24.04 так в терминале: нужно установить бибилотеку wxWdigets в операционную систему. Программа работала. Еще нужно подключить к курл разгадывание капчи, но я не знаю, как это делается. Плюс, странно, 7 дней назад программа работала, а сейчас она возвращает пустую выдачу яндекса, будто пост, гет-запросы не отправляются к форме поиска. Почему так? p.s: если добавить регулярные выражения, то из этих исходных кодов, можно сделать "чекер позиций сайтов в поисковой системе Яндекс".
Выдает такой код хтмл, при попытке работы программы на линукс. Как курл ом получить результат выдачи яндекса?