shadow377
Goto Top

Website in C Sharp einlesen

Brauche lediglich den angezeigten Text (unformatiert) und nicht den gesamten HTML Code

Ich will unter C#.Net (Entwicklungsumgebung Microsoft Visual Studio 2005) den Inhalt einer Website einlesen. Hierbei bin ich auf folgende Möglichkeit gestoßen:
string htmlUri = "https://administrator.de";  
WebRequest requestHtml = WebRequest.Create(htmlUri);
WebResponse responseHtml = requestHtml.GetResponse();
StreamReader r = new StreamReader(responseHtml.GetResponseStream());
string htmlContent = r.ReadToEnd();
r.Close();

Das Problem für mich ist allerdings, dass ich hier die gesamte Website als HTML Code erhalte. Ich benötige aber nur den tatsächlich angezeigten Text (ohne Formatierung) um Informationen von der Seite zu bekommen und beispielsweise nach Schlüsselwörtern suchen zu können.

Weiß jemand, wie das (möglichst einfach) geht?

Für die spätere Verarbeitung wären eventuell auch einzelne Links interessant. Eine Möglichkeit wäre natürlich, die gesamte Seite als HTML Code einzulesen und die betreffende Stelle einfach zu suchen; das ist allerdings eine unsaubere Lösung und kann zu Problemen führen, wenn die gesuchte Stelle öfters vorkommt. Gibt es auch hierfür eine bessere Lösung? Optimal wäre es, wenn Links auch ausgelesen werden, die restliche Formatierung, Header etc allerdings nicht.

Danke schon im Voraus für eure Hilfe.
Shadow377

Content-Key: 98443

Url: https://administrator.de/contentid/98443

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: 16568
16568 04.10.2008 um 17:22:16 Uhr
Goto Top
Würdest Du Dich auch nur annähernd mit HTML beschäftigt haben, würdest Du wissen, daß es nicht geht.

Bis zu einem gewissen Automatismus-Grad ja, aber danach für eigene Projekte und mit Deinem KnowHow:

NEIN


Oder frag' doch einfach mal bei Google nach, wie die das machen, dann wirst Du sehr schnell sehen, daß das mehrere Jahre braucht.


Lonesome Walker
der es haßt, wenn Leute sich nicht mit der Materie beschäftigen, aber einfach mal in ein Forum schneien, und glauben, KnowHow anzapfen zu können, um dann eine Software zu schreiben, mit der sie später ordentlich Kohle machen können, weil sie damit Kunden verarschen, die eh nix peilen...


Pfui deibel...
Mitglied: filippg
filippg 04.10.2008 um 20:38:26 Uhr
Goto Top
Mach mal locker Lonesome. Hier kommt niemand der einen Traktor hat und jetzt fragt, auf welchen Knopf er drücken muss um einen Porsche draus zu machen. Und wenn du dich mit HTML, XML und C# auskennen würdest wüsstest du, dass man dafür keine Jahre braucht.

Den HTML-Code kannst du, wenn er XHMTL-konform ist mit den C#-XML-Bibliotheken verarbeiten. Zu Body-Tag browsen und alles was dir an html-Elementen (img..) nicht passt ausfiltern. Oder gleich alle XML-Elemente selber ausfiltern und nur die inner-Text-Eigenschaft auswerten.
Ja, du hast recht, bis es zuverlässig läuft muss man etwas basteln, aber wenn du dafür Jahre brauchst...
Abgesehen davon gibt es schon seit vielen Jahren "Screenscraper" die genau für diese Aufgabe sind. Vielleicht findet sich eine C#-Version, die das gewünschte leistet.

Gruß

Filipp
Mitglied: 16568
16568 04.10.2008 um 22:37:51 Uhr
Goto Top
Hallo Filipp,

glaub' mir, ich code nicht seit gestern, und im Bereich SEO hab ich auch a bisserl was zu sagen face-wink

Und wenn ich Dir sage, daß die aktuell auf dem Markt käuflich zu erwerbenden Produkte allesamt nix taugen, dann kannst Du davon ausgehen, daß ich so ziemlich alles davon schon mal getestet habe, und bisher aus irgendwelchen Gründen verworfen habe face-sad

Das Auslesen von Text ist sicherlich einfach, aber Zitat:
Ich benötige aber nur den tatsächlich angezeigten Text (ohne Formatierung)
um Informationen von der Seite zu bekommen
und beispielsweise nach Schlüsselwörtern suchen zu können

ja, da geht's dann schon los.

Was ist tatsächlich angezeigter Text?
Wer definiert das?
Ist auch die Navigation angezeigter Text?
Wie wird die Navigation definiert?
(manche machen ja Tabellen, andere so wie ich stehen auf CSS, und da merkst dann gar nix mehr...)

Das Thema HTML und Einlesen, an dem bastelt man, wenn man es gut und zuverlässig für seinen eigenen Zweck braucht, mindestens 6 Monate für ein rudimentäres Framework und die Regex, dann kommt die Performance-Optimierung, dauert auch nochma 6 Monate, und dann stellt man fest, daß dies oder jenes doch nicht so läuft, wie es laufen könnte, weil sich die Technik von HTML 4.01 nach XHTML 1.1 valid geändert hat, also Regex ergänzen, etc...

Du siehst, ich weiß, wovon ich schreibe.

Anyway, doch, für mich trifft der Vergleich mit Trecker und Porsche schon zu face-wink


Alex
Mitglied: Shadow377
Shadow377 05.10.2008 um 10:29:28 Uhr
Goto Top
Danke für eure Antworten. Es tut mir leid, dass ich mich offenbar etwas ungenau ausgedrückt habe. Um zu erläutern, was genau ich brauche, werde ich etwas weiter ausschwenken:
Ich will für mich selbst (also privat und nicht kommerziell!) einen kleinen und einfachen Paketmanager für Windows XP schreiben, der überprüft, ob die installierten Programme noch in der aktuellsten Version vorliegen. Da ich allerdings weder Zeit, noch Lust habe, die Versionen ständig manuell zu aktualisieren, will ich über die Hompepage des Herstellers die aktuellste Version herausfinden und anschließend mit der installierten vergleichen (wie genau ich das mache, damit ich zur Versionsnummer komme weiß ich noch nicht, aber da fällt mir schon noch was ein). Es geht also für mich darum, dass ich von einer Website die Versionsnummer eines Programmes auslese. Hierfür genügt mir unformatierter Text, und es reicht auch, wenn alles vor und nach dem Body weggeschnitten wird, da ich ja nur irgendwo auf der Seite die Versionsnummer brauche.
Im zweiten Schritt wäre dann interessant, dass ich die Links auswerte, um dann bei Bedarf das Setup der letzten Version herunterladen und ausführen zu können.

Ob es sich also um HTLM oder XHTML handelt, lässt sich so spontan nicht beantworten, da es vom jeweiligen Betreiber der Homepage abhängt, wie diese geschrieben wurde. Die Performance ist mir außerdem nicht so wichtig, es darf ruhig ein paar Minuten länger dauern, wenn ich mir dafür das manuelle Updaten erspare.

@filippg: Du hast C# XML Bibliotheken erwähnt, das hört sich mal recht gut an. Kannst du mir eine konkrete empfehlen (am Besten inklusive Tutorial oder so)? Ich nehme an bei Visual Studio selbst wird sicher auch etwas in der Richtung dabei sein oder?

Danke für eure Hilfe
Shadow377
Mitglied: 16568
16568 05.10.2008 um 10:55:52 Uhr
Goto Top
In diesem Falle läßt sich das mittels Regex wunderbar lösen, denn irgendein Kennzeichen muß auf der Homepage ja sein, damit man weiß, welche Versionsnummer es ist.

Andererseits gebe ich Dir zu bedenken, daß es bei gewissen Softwarehäusern auch eine Logfile-Analyse gibt, die Dein Vorhaben sehr schnell sinnlos macht.

Besser wäre es doch einfach, einen Newsletter zu abonnieren, oder mit dem Hersteller direkt in Kontakt zu treten, oder?


Lonesome Walker
Mitglied: Shadow377
Shadow377 05.10.2008 um 11:14:54 Uhr
Goto Top
Regular Expressions sind eine gute Idee, an die ich zuerst garnicht gedacht habe. Man könnte z.B. nach Programmname Versionnummer suchen, dann hat man es eigentlich schon geschafft.
Warum sollte eine Logfile Analyse mein Vorhaben sinnlos machen? Es ist meines Wissens nach ja absolut nichts illegales dabei, eine Website abzurufen und deren Inhalt zu speichern. Und ob das jetzt über einen Browser oder ein anderes Programm geschieht dürfte dabei irrelevant sein. Oder täusche ich mich?

Newsletter wären eine Möglichkeit, allerdings kann man die nicht so gut/leicht auswerten. Weiters soll das Programm auch auf mehreren Rechnern funktionieren, und dort überall die Newsletter zu abonnieren wäre mühsam.

Mit dem Hersteller direkt in Kontakt zu treten kommt für mich nicht in Frage, da es einerseits aufwendig ist, und es außerdem viel zu viele Hersteller sind.

Danke für die Antwort
Shadow377
Mitglied: 16568
16568 05.10.2008 um 13:36:40 Uhr
Goto Top
Zitat von @Shadow377:
Newsletter wären eine Möglichkeit, allerdings kann man die
nicht so gut/leicht auswerten. Weiters soll das Programm auch auf
mehreren Rechnern funktionieren, und dort überall die Newsletter
zu abonnieren wäre mühsam.

Wow, das steht aber in Konflikt mit:

Ich will für mich selbst (also privat und nicht kommerziell!)
einen kleinen und einfachen Paketmanager für Windows XP schreiben,
der überprüft, ob die installierten Programme noch in der aktuellsten Version vorliegen.


Vielleicht doch KnowHow abgrabschen...?


Lonesome Walker
Mitglied: Shadow377
Shadow377 05.10.2008 um 13:47:08 Uhr
Goto Top
Ich finde nicht, dass das ein Wiederspruch ist. Und zwar aus folgendem, ganz simplen Grund: Ich hab nicht nur einen Rechner. Standpc, Laptop, bald werde ich mir einen neuen kaufen und für kleinere Dinge den alten Laptop trotzdem verwenden und noch der Rechner von meiner Schwester, den ich auch warte. Soll durchaus schonmal vorkommen, dass man für mehrere Rechner verantwortlich ist, und es trotzdem rein privat ist. Und um auch dem gleich vorzugreifen: Nein, ich verrechne nichts für die Wartung vom Rechner meiner Schwester. Und auch nicht von meinem Laptop

Shadow377
Mitglied: 16568
16568 05.10.2008 um 15:50:34 Uhr
Goto Top
Ich hab mir ja lange überlegt, ob ich nochwas dazu schreiben sollte...

Wie wär's, wenn Du ein Netzwerk-Share anlegst, und dahin alles runterlädst?
Nicht umsonst hat ja auch MS den WSUS erfunden...

Alles weitere zeugt von Unwissen ( ... oder doch Lüge? )


Lonesome Walker
Mitglied: filippg
filippg 05.10.2008 um 16:03:53 Uhr
Goto Top
Hallo,

in der letzten oder vorletzten c't war eine Vorstellung verschiedener (kostenloser) Programme zur Versionsüberwachung. Wenn es dir um den Effekt und nicht um die Umsetzung geht würde ich dir auf jeden Fall eines dieser Programme empfehlen. Da ist wird dann nicht nur ermittelt, welche Version die aktuelle ist, sondern vor allem auch, welche aktuell installiert ist. Und das bis hin zu Security-Patches.
Wenn man das von Hand macht wird es immer halb-manuell bleiben. Alleine schon das Einpflegen der Hersteller-Website-URLs. Und dann werden die manchmal einfach geändert... Und bei jeder Softwareinstallation muss man da wieder was von Hand erledigen.

Gruß

Filipp
Mitglied: Shadow377
Shadow377 05.10.2008 um 16:10:28 Uhr
Goto Top
Einen WSUS Server betreibe ich schon. Und zwar aus genau dem Grund, weil ich damit die Updates gut verwalten kann. Leider ist der ja auf Microsoft Produkte beschränkt. Da ich auch andere Software wie z.B. Browser, diverse Tools, Media Player etc auf dem aktuellen Stand halten will, ist es damit allerdings nicht getan.
Ich könnte einen Share aufmachen, ja. Alerdings muss ich dann noch immer die aktuellsten Versionen manuell überprüfen, downloaden und installieren. Oder irre ich mich?

Im Prinzip bin ich auf die Idee gekommen, da ich mich im Sommer etwas mit Linux beschäftigt habe, da ist mir dann aufgefallen, dass es eigentlich schlimm ist, dass Windows keinen Paketmanager hat. Dann bin ich auf das Programm Secunia PSI (Freeware) gestoßen, mit dem sich die Software sehr bequem verwalten lässt.
So schwer hat das ganze nicht ausgesehen, und dadurch bin ich auf die Idee gekommen, dass es ja auch möglich sein muss, so ein Programm selbst zu schreiben (und damit ausschließen zu können, dass vllt etwas unerwünschtes mitinstalliert wird). Secuni PSI arbeitet allerdings meines Wissens nach mit einer Datenbank, die gepflegt werden muss, und das kann und will ich mir als Privatperson einfach nicht antun. Der Sinn von diesem Programm ist ja schließlich, dass ich weniger Zeit dafür brauche alles auf dem neuesten Stand zu halten und nicht mehr face-smile

Es stimmt zwar, dass ich die URLs zuerst mal manuell eintragen muss, aber das ist nicht so das Problem für mich. Diese Arbeit macht man einmal und dann hat es sich...die paar kleinen Änderungen die es vielleicht im Lauf der Zeit gibt kann man ja noch machen, das ist ja kein Problem.

Mir geht es einfach darum, so etwas mal selbst zu programmieren, weil es denke ich eine gute Übung ist; außerdem kann man halt wirklich sicher gehen, dass keine unerwünschten Programme installiert werden und keine ungefragten Statistiken über die installierten Programme geführt werden...geht ja auch keinen was an oder?

Shadow377