QRegExp funktioniert nicht wie gewünscht
QRegExp funktioniert nicht wie gewünscht
Hallo,
Ich habe ein dringendes Problem: Und zwar muss ich aus einem HTML Dokument, welches in einem QString ist, alle Links bekommen.
Jetzt habe ich mir das so vorgestellt, dass ich die Regular Expression <a href=".?">.?</a> nehme und dann mittels QString().section( QRegExp(), x, y ) nacheinander alle Links herausbekomme. Nur habe ich mich da wohl zu früh gefreut.
Kann mir bitte jemand bei meinem Problem helfen, es ist wirklich dringend.
Danke!
SG Alex
Ich habe ein dringendes Problem: Und zwar muss ich aus einem HTML Dokument, welches in einem QString ist, alle Links bekommen.
Jetzt habe ich mir das so vorgestellt, dass ich die Regular Expression <a href=".?">.?</a> nehme und dann mittels QString().section( QRegExp(), x, y ) nacheinander alle Links herausbekomme. Nur habe ich mich da wohl zu früh gefreut.
Kann mir bitte jemand bei meinem Problem helfen, es ist wirklich dringend.
Danke!
SG Alex
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Was soll section hier? Hast Du " korrekt gequotet?
Ich hätte es so wie im Beispiel gemacht:
Ich hätte es so wie im Beispiel gemacht:
Code: Alles auswählen
QRegExp rx("deine Regexp");
QString str = "Offsets: 12 14 99 231 7";
QStringList list;
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
list << rx.cap(1);
pos += rx.matchedLength();
}
// list: ["12", "14", "99", "231", "7"]
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: QRegExp funktioniert nicht wie gewünscht
wenn du dass html dokument mit tidy in xhtml umwandelst ... kannst du es mit QXml auslesen alle tag mit attribute posizion einfach alles...Nassian hat geschrieben:Hallo,
Ich habe ein dringendes Problem: Und zwar muss ich aus einem HTML Dokument, welches in einem QString ist, alle Links bekommen.
und dazu kann qt gute pdf daraus machen....
&& mit tidy kannst du noch die url validieren... die statische libs lauf auf alle 3 OS und kompiliert sich in 3 minuten...
http://www.qtforum.de/forum/viewtopic.php?t=2216
Code: Alles auswählen
QDomElement e = n.toElement();
if( !e.isNull() )
{
if( e.tagName() == "a" ) {
e.text()....
hasAttributes () href /* speichern */
}
n = n.nextSibling();
} Re: QRegExp funktioniert nicht wie gewünscht
Die RegExp tut es auch nicht. Ich würde ehr QRegExp("<a href=["\'](.+)["\']>.+</a>") vorschlagen. Für den Rest dann Christians Beispiel folgen. In der Liste hast Du dann schon die reine URL.Nassian hat geschrieben:Jetzt habe ich mir das so vorgestellt, dass ich die Regular Expression <a href=".?">.?</a> nehme und dann mittels QString().section( QRegExp(), x, y ) nacheinander alle Links herausbekomme.
Danke für Eure Mühe! Ich habe es gerade mit der neuen Regular expression und dem Code versucht, jedoch bekomme ich immer noch das gesamte HTML Dokument. Was kann ich da nur falsch machen?
@patrik08: Danke für deinen Vorschlag, aber es ist derzeit leider nicht möglich da noch eine externe Library dazuzunehmen.
Code: Alles auswählen
QFile website( strPagePath );
if( !website.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
qCritical() << "[Spider::GetLinkedWebsites( const QString& )] Failed opening" << strPagePath;
return QStringList();
}
QString strWebsiteDocument = QString( website.readAll() );
website.close();
QRegExp expression( "<a href=[\"\'](.+)[\"\']>.+</a>" );
QStringList linklist;
int iPosition = 0;
while( (iPosition = expression.indexIn( strWebsiteDocument, iPosition )) != -1 ) {
linklist << expression.cap( 1 );
iPosition += expression.matchedLength();
}
qDebug() << linklist;
return linklist;
250 KB dll ? hat kein platz.... du verlierst zeit mit regular expression ...Nassian hat geschrieben:Dan
@patrik08: Danke für deinen Vorschlag, aber es ist derzeit leider nicht möglich da noch eine externe Library dazuzunehmen.
und mailto: problem ... ecc.. 80% von internet seiten haben html fehler.... tidy putzt alles .... und xml ist cool...
.........................
speack português italiano deutsch english castellà qt
speack português italiano deutsch english castellà qt
Um den Platz gehts mir nicht (bin selbst static Anhänger
), aber so wies aussieht werde ich deinen Vorschlag nun doch umsetzen, da es anders wohl nicht funktioniert. Ich danke euch allen vielmals für eure Hilfe!
-edit-
Ich habe gerade tidy installiert und wollte es gleich mal mit der Startseite von heise.de versuchen, allerdings bekomme ich nur Fehler zurück (die Seite ist nicht valid), aber rein gemacht wird sie nicht. Kannst du mir mit der Benützung des Programms vllt. helfen?
-edit-
Ich habe gerade tidy installiert und wollte es gleich mal mit der Startseite von heise.de versuchen, allerdings bekomme ich nur Fehler zurück (die Seite ist nicht valid), aber rein gemacht wird sie nicht. Kannst du mir mit der Benützung des Programms vllt. helfen?
mit subversion hast du alles .....Nassian hat geschrieben:Um den Platz gehts mir nicht (bin selbst static Anhänger), aber so wies aussieht werde ich deinen Vorschlag nun doch umsetzen, da es anders wohl nicht funktioniert. Ich danke euch allen vielmals für eure Hilfe!
-edit-
Ich habe gerade tidy installiert und wollte es gleich mal mit der Startseite von heise.de versuchen, allerdings bekomme ich nur Fehler zurück (die Seite ist nicht valid), aber rein gemacht wird sie nicht. Kannst du mir mit der Benützung des Programms vllt. helfen?
svn co http://ciz.ch/svnciz/_STATIC_LIBS_QT4/lib_tidy_src/ tidylib
Machst einen configurazions file als funktion ....
dass dir immer ein config file schriebt .....
eigentlich alles auf http://qtforum.de/forum/viewtopic.php?t=2216 beschrieben...
QTidy corrww; /* class starten */
corrww.SetUp_xhtml(); /* funktion die dass xhtml setz und dass config schreibet */
corrww.CleanTidy(TIDY_IN,BROWSER_PAGE_1);
dass html in TIDY_IN schreiben und dass resultat bekommst du in BROWSER_PAGE_1
was bereist mit QDomDocument lesen kannst ... alle a tag die http:// enthalten oder wie es du willst....
wichtig ascii ist prima mit QDomDocument ...
manipulation von xml habe ich auch wass in http://qtforum.de/forum/viewtopic.php?t=2350 geschrieben....
Code: Alles auswählen
tidiconfigfile.append("output-xhtml: yes");
tidiconfigfile.append("clean: yes");
tidiconfigfile.append("wrap: 550");
tidiconfigfile.append("indent-spaces: 1");
tidiconfigfile.append("char-encoding: ascii");
tidiconfigfile.append("output-encoding: ascii");
tidiconfigfile.append("wrap-attributes: yes");
tidiconfigfile.append("doctype: no");
tidiconfigfile.append("hide-comments: yes");
tidiconfigfile.append("numeric-entities: yes");
tidiconfigfile.append("drop-proprietary-attributes: no");
tidiconfigfile.append("word-2000: yes"); .........................
speack português italiano deutsch english castellà qt
speack português italiano deutsch english castellà qt
Nassian hat geschrieben:tartseite von heise.de versuchen, allerdings bekomme ich nur Fehler zurück (die Seite ist nicht valid), aber rein gemacht wird sie nicht. Kannst du mir mit der Benützung des Programms vllt. helfen?
wie host du die seite von www.heise.de ? ... tidy ist nicht ein browser der dateien holt! .....
zuerst musst du via QHttp; dass file holen.....
wget class alles qt...
http://qtforum.de/forum/viewtopic.php?t=2269
.........................
speack português italiano deutsch english castellà qt
speack português italiano deutsch english castellà qt
Na also ....
class qtidy ...
http://ciz.ch/svnciz/cms_qt4/_current_l ... /qtidy.cpp
http://ciz.ch/svnciz/cms_qt4/_current_l ... le/qtidy.h
und irgendwo in deinen configurationsfile gibst ....
QTidy jobclean;
jobclean.SetUp_xhtml();
jobclean.CleanTidy("index.html","resultat.html");
und qxml kann dass file lesen....
IMO:
Um die dateien zu holen brauche ich libcurl http://curl.haxx.se/ da QHttp keine cookie akteptiert.... und keine redirect ....
http://ciz.ch/svnciz/cms_qt4/_current_l ... /qcurl.cpp
http://ciz.ch/svnciz/cms_qt4/_current_l ... le/qcurl.h
aber sicher musst du einfache seiten laden ohne pass und HTTP_POST somit ist QHttp voll genug....
class qtidy ...
http://ciz.ch/svnciz/cms_qt4/_current_l ... /qtidy.cpp
http://ciz.ch/svnciz/cms_qt4/_current_l ... le/qtidy.h
und irgendwo in deinen configurationsfile gibst ....
Code: Alles auswählen
#define TIDY_CONF \
QString( "%1tidy.conf" ).arg( WORK_CACHEDIR )
QTidy jobclean;
jobclean.SetUp_xhtml();
jobclean.CleanTidy("index.html","resultat.html");
und qxml kann dass file lesen....
IMO:
Um die dateien zu holen brauche ich libcurl http://curl.haxx.se/ da QHttp keine cookie akteptiert.... und keine redirect ....
http://ciz.ch/svnciz/cms_qt4/_current_l ... /qcurl.cpp
http://ciz.ch/svnciz/cms_qt4/_current_l ... le/qcurl.h
aber sicher musst du einfache seiten laden ohne pass und HTTP_POST somit ist QHttp voll genug....
.........................
speack português italiano deutsch english castellà qt
speack português italiano deutsch english castellà qt
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
IMO: nachste woche muss ich ein programm anfangen dass rss und homepage news automatisch holen kann ( wie http://calcionotizie.com/ php5 script ... alle 20 minuten news ueber fussball. neue von ueberall ....)...
und habe bereit das erste setup gemacht ... die console version lauft bereits gut....
# netless url1 url2 url3 unsw.
holt die url und macht ein gueltiges xml file daraus .... dass man mit QDomDocument auslesen kann...
svn co http://ciz.ch/svnciz/net_less/ netless
und habe bereit das erste setup gemacht ... die console version lauft bereits gut....
# netless url1 url2 url3 unsw.
holt die url und macht ein gueltiges xml file daraus .... dass man mit QDomDocument auslesen kann...
svn co http://ciz.ch/svnciz/net_less/ netless
.........................
speack português italiano deutsch english castellà qt
speack português italiano deutsch english castellà qt
Ein Fehler, den ich auch immer macheNassian hat geschrieben:Danke für Eure Mühe! Ich habe es gerade mit der neuen Regular expression und dem Code versucht, jedoch bekomme ich immer noch das gesamte HTML Dokument. Was kann ich da nur falsch machen?
Code: Alles auswählen
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile website( "News.htm" );
if( !website.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
qCritical() << "[Spider::GetLinkedWebsites( const QString& )] Failed opening";
}
QString strWebsiteDocument = QString( website.readAll() );
website.close();
QRegExp expression( "<a href=["\'](.*)["\']" );
expression.setMinimal(true);
QStringList linklist;
int iPosition = 0;
while( (iPosition = expression.indexIn( strWebsiteDocument, iPosition )) != -1 ) {
linklist << expression.cap( 1 );
iPosition += expression.matchedLength();
}
qDebug() << linklist;
return 0;
}