Sto cercando una buona libreria C++ per il web scraping.
deve essere essere C/C++ e niente altro quindi, per favore non indirizzarmi a Options for HTML scraping o altre domande/risposte SO dove C++ non è nemmeno menzionato.Opzioni per scraping web - solo versione C++
risposta
il tuo secondo link dovrebbe probabilmente andare a http://tidy.sourceforge.net/? –
+1 Esattamente quello che stavo cercando, ho usato curl molto dal cli ma non ho mai pensato di usarlo come libreria :) – rflood89
// download winhttpclient.h
// --------------------------------
#include <winhttp\WinHttpClient.h>
using namespace std;
typedef unsigned char byte;
#define foreach BOOST_FOREACH
#define reverse_foreach BOOST_REVERSE_FOREACH
bool substrexvealue(const std::wstring& html,const std::string& tg1,const std::string& tg2,std::string& value, long& next) {
long p1,p2;
std::wstring wtmp;
std::wstring wtg1(tg1.begin(),tg1.end());
std::wstring wtg2(tg2.begin(),tg2.end());
p1=html.find(wtg1,next);
if(p1!=std::wstring::npos) {
p2=html.find(wtg2,next);
if(p2!=std::wstring::npos) {
p1+=wtg1.size();
wtmp=html.substr(p1,p2-p1-1);
value=std::string(wtmp.begin(),wtmp.end());
boost::trim(value);
next=p1+1;
}
}
return p1!=std::wstring::npos;
}
bool extractvalue(const std::wstring& html,const std::string& tag,std::string& value, long& next) {
long p1,p2,p3;
std::wstring wtmp;
std::wstring wtag(tag.begin(),tag.end());
p1=html.find(wtag,next);
if(p1!=std::wstring::npos) {
p2=html.find(L">",p1+wtag.size()-1);
p3=html.find(L"<",p2+1);
wtmp=html.substr(p2+1,p3-p2-1);
value=std::string(wtmp.begin(),wtmp.end());
boost::trim(value);
next=p1+1;
}
return p1!=std::wstring::npos;
}
bool GetHTML(const std::string& url,std::wstring& header,std::wstring& hmtl) {
std::wstring wurl = std::wstring(url.begin(),url.end());
bool ret=false;
try {
WinHttpClient client(wurl.c_str());
std::string url_protocol=url.substr(0,5);
std::transform(url_protocol.begin(), url_protocol.end(), url_protocol.begin(), (int (*)(int))std::toupper);
if(url_protocol=="HTTPS") client.SetRequireValidSslCertificates(false);
client.SetUserAgent(L"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
if(client.SendHttpRequest()) {
header = client.GetResponseHeader();
hmtl = client.GetResponseContent();
ret=true;
}
}catch(...) {
header=L"Error";
hmtl=L"";
}
return ret;
}
int main() {
std::string url = "http://www.google.fr";
std::wstring header,html;
GetHTML(url,header,html));
}
codice senza spiegazione è una cattiva idea, puoi spiegare questo? –
consiglio QT5. 6.2, questa potente libreria fuori er noi
- alto livello, intuitivo, asincrono API di rete come QNetworkAccessManager, QNetworkReply, QNetworkProxy ecc
- potente classe regex come QRegularExpression
- motore Web decente come QtWebEngine
- robusta, gui maturo come QWidgets
- La maggior parte delle Qt5 api sono ben progettate, il segnale e lo slot rendono la scrittura di codici asincroni molto più semplici
- Supporto unicode grande
- Libreria di file system ricca di funzioni. Sia creare, eliminare, rinominare o trovare il percorso standard per salvare i file è un pezzo di torta in QT5
- API asincrona di QNetworkAccessManager rendere più facile per deporre le uova molti richiesta di download in una sola volta
- piattaforme desktop principali Croce, Windows, Mac OS e Linux , scrivi una volta compilato ovunque, solo una base di codice.
- facile da implementare su Windows e Mac (linux? Forse linuxdeployqt noi può risparmiare tonnellate di guai)
- Facile da installare su Windows, Mac e Linux
- E così via
ho già scritto un App per raschietto di immagini Qt5, questa app può raschiare quasi tutte le immagini cercate da Google, Bing e Yahoo.
Per ulteriori informazioni a riguardo, visitare my github project. Ho scritto una panoramica di alto livello su come raschiare i dati di Qt5 su i miei blog (è troppo lungo per postare allo stack overflow).
Perché raccomandi la versione 5.6.2 e non l'ultima (attualmente è 5.9.0)? –
@PiotrDobrogost Il motivo principale è che non so quanto sia stabile Qt5.9.0, un'altra ragione è il supporto per Qt5.6.2 windows xp – StereoMatching
sta convertendo il codice HTML in XML prima un'opzione? non ci sono molti parser HTML buoni per C++, ci sono comunque per XML. –