Auszug einer Tabelle aus einer HTML-Datei mit dem PowerShell-oder VBS
Habe ich eine zwei Teil-problem, das repariert werden muss. Ich werde versuchen, mein bestes, um es dann zu brechen, was ich "glaube" die Schritte sind.
Ich versuche zu bekommen eine bestimmte Tabelle in einer Webseite und die E-Mail an mich.
Im moment, was ich versuche ist die Verwendung von GNU\Win32 wget.exe
(ich würde lieber mit der PowerShell nativ aber aus irgendeinem Grund konnte ich es nicht, vielleicht, weil die Methode, die ich verwendet wurde, konnte nicht Rendern der ASPX-Seite?)
Mit wget
ich war in der Lage, eine lokale html-version der ASPX-Seite.
Nun habe ich schon versucht zu analysieren der Datei und extrahieren Sie eine bestimmte Tabelle. In diesem besonderen Fall die Tabelle beginnt mit <table border="0" cellpadding="2" cellspacing="2" width="300px">
und endet mit </table>
und es gibt keine verschachtelten Tabellen.
Habe ich geworfen, einige regex-bei meinem problem (ja, ich weiß, regex kann nicht sein das tool, das ich hier brauchen), aber ohne Erfolg.
---Ammended
Hier ist, wo ich bin, jetzt...
$content = (new-object System.Net.WebClient).DownloadString($url)
$found = $content -cmatch '(?si)<table border="0" cellpadding="2" cellspacing="2" width="300px"[^>]*>(.*?)Total Queries</td>(.*?)</tr>(.*?)</table>'
$result = $matches[3]
$result
- dies ist eine einmalige Aufgabe, oder etwas automatisiert werden, für einen längeren Zeitraum? Ist das für einen Kunden oder für einen admin?
- Automatisierte. Admin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich getan habe, diese Art der Sache mit PowerShell. Es ist ziemlich einfach:
Nur Ersatz
width
fürborder
und300px
für0
für Ihre regex z.B.:Ih den Fall der übereinstimmenden mehreren Tabellen, die Sie haben, um Schalter aus -übereinstimmen, ist ein boolescher operator nur auf der Suche zu finden ein single match-Select-String die finden alle Spiele z.B.:
Im wesentlichen werden alle Spiele in der$_ -.Matches-Auflistung. Wenn Sie wissen, dass die Tabelle ist immer der Dritte, den Sie zugreifen können, etwa so:
Vor einer Weile schrieb ich eine Funktion namens Get-MarkupTag. Dies bringt Sie Weg von der Verwendung von regulären Ausdrücken direkt (es hat also unter der Decke). Es wird auch versucht, schalten Sie HTML in XML, an welcher Stelle immer aus den Daten ist Recht einfach.
Tun dies mit Get-MarkupTag, würden Sie etwas tun, wie
Hoffe, das hilft
Ich würde es angehen diese Weise mit VBScript.
entfernen Sie alle doppelten Anführungszeichen mit einfachen Anführungszeichen, die nur für einfache Lesen & schreiben von code. also
myHTMLString = Replace(myHTMLString, """", "'")
festzustellen, ob die Datei enthält Ihre Tabelle. Klingt es nicht ein
id
odername
Attribut. Schade, aber wenn das fehlschlägt, verwenden SieInStr
zu bestimmen, wo die Ausgangsposition des Tisches ist.Dim tableStartsAt = InStr(myHTMLString,"<table border='0'")
Vorsichtig mit allen Attributen hier wie bist du auf die Gnade der Tisch mit seinen Parametern bewegt, ohne dass Sie es bemerken! Vielleicht, wenn Sie keine passende Tabelle gefunden wird, E-Mail, DASS Statistiken an sich selbst als eine Warnung, dass einige Wartung erforderlich ist.nun, dass Sie die start-position der Tabelle zu finden sein end-tag. also
Dim tableEndsAt = InStr(tableStartsAt,myHTMLString,"</table>")
Holen Sie sich die HTML-string:
Dim myTable = Mid(myHTMLString,tableStartsAt,tableEndsAt-tableStartsAt)
legen, die in einem E-Mail senden mithilfe von VBScript. Sicherzustellen, dass Sie haben
Mail.IsHTML = True
. Hier ist ein weiterer VBScript senden von E-Mails Frage.Ich dachte, die HuddleMasses Get-Web-cmdlets, hatte Sie die Möglichkeit zu Lesen, in Tabellen, als XML.