Estoy buscando una buena biblioteca C++ para raspar web.
Se tiene que ser C/C++ y nada otra cosa así que por favor no me dirija a Options for HTML scraping u otros SO preguntas/respuestas donde ni siquiera se menciona C++.Opciones para raspar web - Versión C++ solamente
Respuesta
su segundo enlace probablemente debería ir a http://tidy.sourceforge.net/? –
+1 Exactamente lo que estaba buscando, he usado curl mucho de la cli pero nunca pensé en usarlo como una biblioteca :) – 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));
}
código sin explicación es una mala idea, ¿puedes explicarlo? –
recomiendo QT5. 6.2, esta poderosa biblioteca de er nos
- alto nivel, intuitiva, API de red asíncrona como QNetworkAccessManager, QNetworkReply, QNetworkProxy etc
- clase de expresiones regulares de gran alcance como QRegularExpression
- motor web decente como QtWebEngine
- robusto, gui madura como QWidgets
- La mayoría de las api Qt5 están bien diseñadas, la señal y la ranura hacen que escribir códigos asíncronos sea mucho más fácil también
- Gran compatibilidad con Unicode
- Feature rich system system library. Ya sea crear, eliminar, renombrar o encontrar ruta estándar para guardar archivos es pedazo de pastel en QT5
- API asíncrona de QNetworkAccessManager que sea fácil de generar demanda de carga a muchos a la vez
- principales plataformas de escritorio de la Cruz, Windows, OS Mac y Linux , escribe una vez compilado en cualquier lugar, solo un código.
- fácil de implementar en Windows y Mac (Linux? Quizá linuxdeployqt nosotros puede ahorrar toneladas de problemas)
- Fácil de instalar en Windows, Mac y Linux
- Y así sucesivamente
que ya escribió una aplicaciones de raspado de imagen de Qt5, esta aplicación puede raspar casi todas las imágenes buscadas por Google, Bing y Yahoo.
Para saber más detalles al respecto, por favor visite my github project. Escribí una descripción general de alto nivel sobre cómo recopilar datos por Qt5 en mis blogs (es demasiado largo para publicar en desbordamiento de pila).
¿Por qué recomienda la versión 5.6.2 y no la última (actualmente es 5.9.0)? –
@PiotrDobrogost La razón principal es que no sé cuán estable es Qt5.9.0, otra razón es que Qt5.6.2 es compatible con Windows XP – StereoMatching
- 1. Raspar una página web con C# y HTMLAgility
- 2. ¿Cómo raspar logotipos de sitios web?
- 3. Cómo raspar HTTPS javascript páginas web
- 4. ¿Hay algún lenguaje que sea simplemente "perfecto" para raspar web?
- 5. pruebas unitarias para raspar pantallas?
- 6. Desactive CustomErrors para servicio web solamente
- 7. raspar sitios web con desplazamiento infinito
- 8. C# Regex para números y guiones solamente
- 9. ¿Cuál es el mejor lenguaje para raspar pantallas?
- 10. ¿Puedo raspar el flash?
- 11. raspar y convertir el sitio web en HTML?
- 12. ¿Cuál es la mejor manera de escribir una aplicación web para raspar?
- 13. implementando control de versión para desarrollo web
- 14. Texto cuerpo de Scrapy solamente
- 15. C# Opciones asincrónicas para procesar una lista
- 16. ¿Cómo puedo usar R (paquetes Rcurl/XML?!) Para raspar esta página web.
- 17. ¿Cómo puedo ingresar datos en una página web para raspar la salida resultante usando Python?
- 18. Opciones de Java para autenticación de usuario web
- 19. Buenas opciones para Java Desarrollador que necesita alojamiento web económico
- 20. "es" C# múltiples opciones
- 21. ¿Hay algo más rápido que Jsoup para raspar HTML?
- 22. Opciones de interfaz web de Hadoop Hive
- 23. ¿Cuáles son las opciones actuales para Delphi Web & Web Service Development
- 24. Scrapy ¿leyó la lista de URL del archivo para raspar?
- 25. ¿Qué versión de Python debería usar para el desarrollo web?
- 26. C# opciones de envío múltiple?
- 27. Alfanumérico a numérico solamente
- 28. Deshabilitar las opciones de selección basadas en el valor * a través del HTML solamente! *
- 29. Opciones para | (tubería) comando
- 30. Arrastrar y raspar iTunes App Store
es convertir el HTML a XML primera opción? no hay muchos analizadores de HTML buenos para C++, pero sí para XML. –