Du bist nicht angemeldet.

Kontrollzentrum

Spenden

Jeder Euro hilft uns, euch zu helfen.

Adsense

Downloads

Stabil: 3.3.8.1 (Q, H)
Stabil: 3.3.12.0 (Q, H)
Beta: 3.3.11.5 (Q, H)
SciTE: 4/5/2014 (Q, H)
Hilfe Deutsch: 12/23/2013 (Q)
Download: OrganizeIncludes (Q)
Stand: 02.06.2014 - 2:21 Uhr

Lieber Besucher, herzlich willkommen bei: AutoIt.de - Das deutsche AutoIt-Forum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

  • »HassanMullah« ist der Autor dieses Themas

Registrierungsdatum: 24. September 2007

  • Private Nachricht senden

1

Donnerstag, 25. April 2013, 15:48

HTML Quelltext nach Stringmuster parsen und in eine Datei schreiben

Hallo zusammen,

ich stehe gerade vor folgendem Problem, welches ich gerne mit Autoit und nicht mit notepad++ lösen möchte :-)

Ich muss von einigen Webseiten mir den kompletten Quelltext anzeigen lassen und aus diesem ein bestimmtes Stringmuster finden, welches dann in eine separate Textdatei geschrieben werden muss.

Hier mal ein Beispielausschnitt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</tr><tr>
						<td><a href="/LaenderEANV_Web/postfach?leanv_postfach_action=openDoc&id=zksMID13044128891107017066178632747091" class="zks_cntlnk_downl">G088161010 ENT<br/></a></td>
						<td>03.05.2011  10:54:49</td>
						<td>BGS / 177635616223804 / RA-FS558</td>
					</tr><tr>
						<td><a href="/LaenderEANV_Web/postfach?leanv_postfach_action=openDoc&id=zksMID13237953322745012591947546631736" class="zks_cntlnk_downl">ASVCMOD019 PROV<br/></a></td>
						<td>13.12.2011  17:55:32</td>
						<td>RQT / 2537f0b4-5e43-4</td>
					</tr><tr>
						<td><a href="/LaenderEANV_Web/postfach?leanv_postfach_action=openDoc&id=zksMID13238466428934842004851035756157" class="zks_cntlnk_downl">ASVCMOD019 PROV<br/></a></td>
						<td>14.12.2011  08:10:43</td>
						<td>RQT / bdfa75e4-31ff-4</td>
					</tr></table><br /><h2>KLINK-Entsorgung, M58REC0027 / Entsorger</h2>
				<table cellspacing="0" class="zks_cnt_tbl zks_cnt_epost">
				<tr>

Am Beispiel von

Quellcode

1
id=zksMID13044128891107017066178632747091"

brauche ich dann den String "zksMID13044128891107017066178632747091", da die Zahlen jedoch nonstop andere sind, muss ich die Suche einschränken, d.h. vorne nach id=zksMID und hinten mit Anführungzeichen beenden.

Ich habe leider überhaupt keine Ansatz, wie ich das anstellen soll. Kann mich bitte mal jemand in die richtige Richtung schubsen ?

Danke

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »HassanMullah« (3. Juni 2013, 16:10) aus folgendem Grund: Thema wird erweitert


x0r

User

Registrierungsdatum: 9. September 2010

Wohnort: Mittelfranken

Beruf: IT-Systemkaufmann

  • Private Nachricht senden

2

Donnerstag, 25. April 2013, 15:54

hi,

mit _stringbetween() biste ganz gut beraten, denk ich :-)

AutoIt-Quellcode

1
2
3
4
5
6
7
#include <string.au3>
$str = "dein quelltext" ;oder mit clipget() oder direkt über _inetgetsource()
$line = _stringbetween($str,'id=zksMID','"')

for $i = 0 to ubound($line)-1
  filewrite("deinetxt.txt",$line[$i])
next


musst evtl noch bissl umbauen, is nur kurz hingeklatscht :D
Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

Registrierungsdatum: 8. Mai 2011

Wohnort: Bayern

Beruf: CNC-Fräser

  • Private Nachricht senden

3

Donnerstag, 25. April 2013, 15:56

Schau dir mal

AutoIt-Quellcode

1
_StringBetween()
an

Edit: Und wieder mal war ich zu langsam ^^

PuReIroNie

ehemals xXxProGamerxXx

Registrierungsdatum: 17. Juni 2010

Wohnort: NRW / Münster

  • Private Nachricht senden

4

Donnerstag, 25. April 2013, 16:01

Mal zum direkt Testen:

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string.au3>
#include <array.au3>
$String='</tr><tr>' &@CRLF
$String&='        <td><a href="/LaenderEANV_Web/postfach?leanv_postfach_action=openDoc&id=zksMID13044128891107017066178632747091" class="zks_cntlnk_downl">G088161010 ENT<br/></a></td>'&@CRLF
$String&='    <td>03.05.2011  10:54:49</td>'&@CRLF
$String&='        <td>BGS / 177635616223804 / RA-FS558</td>'&@CRLF
$String&='    </tr><tr>'&@CRLF
$String&='        <td><a href="/LaenderEANV_Web/postfach?leanv_postfach_action=openDoc&id=zksMID13237953322745012591947546631736" class="zks_cntlnk_downl">ASVCMOD019 PROV<br/></a></td>'&@CRLF
$String&='        <td>13.12.2011  17:55:32</td>'&@CRLF
$String&='        <td>RQT / 2537f0b4-5e43-4</td>'&@CRLF
$String&='    </tr><tr>'&@CRLF
$String&='        <td><a href="/LaenderEANV_Web/postfach?leanv_postfach_action=openDoc&id=zksMID13238466428934842004851035756157" class="zks_cntlnk_downl">ASVCMOD019 PROV<br/></a></td>'&@CRLF
$String&='        <td>14.12.2011  08:10:43</td>'&@CRLF
$String&='        <td>RQT / bdfa75e4-31ff-4</td>'&@CRLF
$String&='    </tr></table><br /><h2>KLINK-Entsorgung, M58REC0027 / Entsorger</h2>'&@CRLF
$String&='<table cellspacing="0" class="zks_cnt_tbl zks_cnt_epost">'&@CRLF
$String&='<tr>'

MsgBox(0,"test",$String)
$ID=_StringBetween($String,'id=','"')
_ArrayDisplay($ID)
Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

  Spoiler Spoiler

Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
aber ich versuche wenigstens zu helfen :rolleyes:

  • »HassanMullah« ist der Autor dieses Themas

Registrierungsdatum: 24. September 2007

  • Private Nachricht senden

5

Donnerstag, 25. April 2013, 16:15

Hallo zusammen,

die Lösung von x0r war perfekt. Habe das ganze mit der Zwischenablage verwirklicht und den String noch in der Textdatei etwas angepasst.
Ich dachte weiß gut was für Code hier zusammen geschustert werden muss, und dann so einfach.

Super, vielen vielen Dank

x0r

User

Registrierungsdatum: 9. September 2010

Wohnort: Mittelfranken

Beruf: IT-Systemkaufmann

  • Private Nachricht senden

6

Donnerstag, 25. April 2013, 16:21

Kein Thema, gern geholfen! :)

Ich löse in der Firma meine "Webseite-auslesen"-Aufgaben immer so, ist sehr praktisch, grade in Verbindung mit "_InetGetSource()".

Gruß
x0r
Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

Registrierungsdatum: 20. Februar 2010

Wohnort: Teltow, Berlin

Beruf: Schüler

  • Private Nachricht senden

7

Donnerstag, 25. April 2013, 18:41

Oder du machst es per RegEx, falls du mal ne andere ID hast:

Quellcode

1
id=(\w*?)"

x0r

User

Registrierungsdatum: 9. September 2010

Wohnort: Mittelfranken

Beruf: IT-Systemkaufmann

  • Private Nachricht senden

8

Donnerstag, 25. April 2013, 20:22

Andere ID:

AutoIt-Quellcode

1
$line = _stringbetween($str,'id=','"')


...für die kleine Änderung am Script lern ich mich jetzt nicht extra in Regex ein ;)

Man kann auch so ganz gut die Probleme lösen, wenn auch manchmal ein wenig umständlich.
Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • »HassanMullah« ist der Autor dieses Themas

Registrierungsdatum: 24. September 2007

  • Private Nachricht senden

9

Montag, 3. Juni 2013, 16:18

Hallo,

ich muss den Thread nochmals öffnen, da ich die Abfrage etwas erweitern muss.
Hier nochmals ein Beispielquelltext

neuer Quelltext

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID1350487715331683322635013472094" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>
                        <td>17.10.2012  17:28:36</td>
                        <td>ENS ENI375RCR168   </td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID1350642330996918345786918694013" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>
                        <td>19.10.2012  12:25:31</td>
                        <td>ENS ENI375RCR168   </td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13506471929937500251323432454104" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>
                        <td>19.10.2012  13:46:34</td>
                        <td>ENS ENI375RCR172   </td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID1350647250822537655534347189580" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>
                        <td>19.10.2012  13:47:31</td>
                        <td>ENS ENI375RCR172   </td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13506473107021780770208607756122" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>
                        <td>19.10.2012  13:48:31</td>
                        <td>BGS 101579582354185</td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509173780845298174083252006356" class="zks_cntlnk_downl">ASVCMOD019 PROV<br/>Service-Modul</a></td>
                        <td>22.10.2012  16:49:38</td>
                        <td>RQT 7f000309-c3bd-4</td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509176158795432820887193055664" class="zks_cntlnk_downl">ASVCMOD019 PROV<br/>Service-Modul</a></td>
                        <td>22.10.2012  16:53:36</td>
                        <td>RQT bb576022-ab72-4</td>
                    </tr><tr>
                        <td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509935131916155264644490769628" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>
                        <td>23.10.2012  13:58:33</td>
                        <td>QT 183825683041081 REG-FT 15 </td>

Ich nehme als Beispiel mal die Zeile 30 und 32. Momentan liest das Script ja ALLE "zksMIDs" aus. Ich brauche jetzt aber die Lösung so, dass wenn z.B. in Zeile 32 ein

PHP-Quelltext

1
<td>QT
steht, dann soll die zksMID aus Zeile 30 gelesen werden, wenn jedoch dort z.B.

PHP-Quelltext

1
<td>BGS
steht (siehe Zeile 20), dann soll die Zeile 18 nicht gelesen werden.

Kann man sowas irgendwie hinbekommen ?

Registrierungsdatum: 4. Februar 2012

  • Private Nachricht senden

10

Montag, 3. Juni 2013, 21:27

...für die kleine Änderung am Script lern ich mich jetzt nicht extra in Regex ein
Kann man sowas irgendwie hinbekommen ?
Und genau an dieser Stelle setzt nun RegEx an. ^^

  Spoiler Spoiler

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <Array.au3>
$sHTML = '<td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509935131916155264644490769628" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>'&@LF
$sHTML &= '<td>23.10.2012  13:58:33</td>' & @LF
$sHTML &= '<td>QT / 183825683041081 / REG-FT 15 </td>' &@LF
$sHTML &= '<td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509935131916155264644490769628" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>'&@LF
$sHTML &= '<td>23.10.2012  13:58:33</td>' & @LF
$sHTML &= '<td>Q1T / 183825683041081 / REG-FT 15 </td>' &@LF
$sHTML &= '<td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509935131916155264644490769628" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>'&@LF
$sHTML &= '<td>23.10.2012  13:58:33</td>' & @LF
$sHTML &= '<td>ABC / 183825683041081 / REG-FT 15 </td>' &@LF
$sHTML &= '<td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509935131916155264644490769628" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>'&@LF
$sHTML &= '<td>23.10.2012  13:58:33</td>' & @LF
$sHTML &= '<td>1234 / 183825683041081 / REG-FT 15 </td>' &@LF
$sHTML &= '<td><a href="/Web/postfach?postfach_action=openDoc&id=zksMID13509935131916155264644490769628" class="zks_cntlnk_downl">I375S00051 ENT<br/>FirmaA<br/>Bodenbehandlungsanlage</a></td>'&@LF
$sHTML &= '<td>23.10.2012  13:58:33</td>' & @LF
$sHTML &= '<td>LSD / 183825683041081 / REG-FT 15 </td>' &@LF


$aResult = StringRegExp($sHTML,'(?s)id=(\w+?)".*?<td>(?:QT|ABC|123) ',3)
If IsArray($aResult) Then
    _ArrayDisplay($aResult)
Else
    ConsoleWrite("Nichts Gefunden!" & @LF)
EndIf

"(?:QT|ABC|123)" Dieser Teil des Patterns funktioniert wie ein Oder: Es werden Einträge gefunden, die entweder ein "QT" oder "ABC" oder "123" haben. Das kannst du dann so anpassen, wie du es brauchst... ;)
LG
Christoph :rolleyes:

x0r

User

Registrierungsdatum: 9. September 2010

Wohnort: Mittelfranken

Beruf: IT-Systemkaufmann

  • Private Nachricht senden

11

Dienstag, 4. Juni 2013, 08:33

Ich beneide alle, die RegEx drauf haben, ihr seid toll! :D

...und ich bin doof, weil ichs nicht kann :wacko:
Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • »HassanMullah« ist der Autor dieses Themas

Registrierungsdatum: 24. September 2007

  • Private Nachricht senden

12

Dienstag, 4. Juni 2013, 10:49

@x0r: Nicht traurig sein, Du hast dafür andere Qualitäten :-)

@Christoph54: Ich traue mich ja langsam an RegEx ran, aber ich habe an Deinem Beispiel 2 Verständnisprobleme.

1.) Du zerlegst meine paar Beispielzeilen in den String $sHTML. Das sieht hier nach viel "Schreibarbeit" aus. Ich habe aber den gesamten Quelltext der Site in der Zwischenablage. Reicht es hier aus, die Zwischenablage in eine Variable auszulesen, oder muss hier noch was "von Hand" gemacht werden.

2.) Fehlt mir die Logik, woher das Script weiss, wenn es z.B. (an Deinem Beispiel) in Zeile 4 ein "QT" findet, das dann die "zksMID" in Zeile 2 interessant ist und gezogen werden muss.

Gruss und vielen Dank

Hassan

Registrierungsdatum: 4. Februar 2012

  • Private Nachricht senden

13

Dienstag, 4. Juni 2013, 21:33

1.) Du zerlegst meine paar Beispielzeilen in den String $sHTML. Das sieht hier nach viel "Schreibarbeit" aus. Ich habe aber den gesamten Quelltext der Site in der Zwischenablage. Reicht es hier aus, die Zwischenablage in eine Variable auszulesen, oder muss hier noch was "von Hand" gemacht werden.
Die Variable $sHTML und die Zeilen in denen Teile deines Quelltextes hineinschreibe waren allein zum Testen da. Wichtig ist eigentlich nur Zeile 19. Wie du nun den Quelltext in eine Variable bekommst kannst du dir aussuchen. Du könntest beispielsweise statt $sHTML auch einfach ClipGet() schreiben und alles über Zeile 19 löschen...;)
2.) Fehlt mir die Logik, woher das Script weiss, wenn es z.B. (an Deinem Beispiel) in Zeile 4 ein "QT" findet, das dann die "zksMID" in Zeile 2 interessant ist und gezogen werden muss.
Leider habe ich gerade nicht die Zeit, um das ganze RegEx-Pattern für dich aufzubröseln, aber ich erkläre es dir jetzt mal vereinfacht so: Das Pattern 'sucht' im Quelltext nach einer ID und schaut dann noch ob "kurz darauf" ein <td>QT (oder 123 oder ABC) auftritt. Zur Veranschaulichung kannst du auch mal folgendes tun: Wenn du in der "Oder-Klammer" das "?:" rauslöschst, wird dir im Array zusätzlich immer noch das QT oder 123 oder ABC ausgegeben.
Ich hoffe ich hab es einigermaßen verständlich erklärt... :)
Achja: Wenn du den "Quelltext" von einer Internetseite kopierst kannst du dir das kopieren sparen, indem du mit deinem Script die Seite direkt herunterlädst. (InetGet;InetGetSource)
LG
Christoph :rolleyes:

  • »HassanMullah« ist der Autor dieses Themas

Registrierungsdatum: 24. September 2007

  • Private Nachricht senden

14

Mittwoch, 5. Juni 2013, 08:51

Hallo Christoph,

vielen Dank für die einfach zu verstehende Erklärung. Was lerne ich daraus ? Doch in RegEx einarbeiten :whistling:

Gruss Hassan

autoit.de Webutation