Nachdem ich das letzte Mal meine Daten aufbereitet habe gehts jetzt an das Script. Ich werde das Script in PHP machen, weil ich die Sprache mag und einigermaßen fit darin bin. Außerdem kann ich sie auf Windows und Linux gleichermaßen benutzen. In dem Fall verwende ich die Netbeans IDE, obwohl natürlich ein einfacher Editor auch reichen würde. Natürlich eignet sich jede andere Programmiersprache auch dafür (so wie Phyton, TCL, was auch immer).
So wie das letzte Mal muß ich mir erst mal den HTML Code ansehen. Ich schaue mir dazu wieder den Quelltext an und suche nach den <TABLE> Tags und werde prompt fündig. Ohne jetzt wieder genauer darauf einzugehen schaue ich mir an woran ich die einzelnen Spalten eindeutig identifizieren kann. Wenn ich so etwas mache dann habe ich immer im Hintergrund eine Textdatei in meinem Notepad++ offen und kopiere mir diese ganzen Infos gleich da rein. Da habe ich alles beieinander und kann mir dann alles Notwendige wieder rauskopieren.
Dann schreibe ich ein Script dass meine CSV Zeile für Zeile durchgeht, die Parameter rausholt. Dann rufe ich die Webseite mit den Parametern auf, parse den Quelltext nach meinen gesuchten Informationen und schreibe diese wieder in eine CSV Datei.
Ich arbeite unten im Code übrigens mit REGEX. Viele mögen das nicht aber ich finde das unheimlich mächtig für solche Aufgaben. Zugegeben es ist ein bißchen kompliziert am Anfang aber es gibt ein paar gute Hilfen. Ich verwende zum Beispiel zum Entwickeln und Testen https://regex101.com/
Damit der unten stehende Code läuft müssen in der php.ini folgende extension aktiviert sein:
- extension=php_openssl.dll
- extension=php_curl.dll
außerdem muß “allow_url_fopen = On” gesetzt sein.
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 |
<?php ini_set('auto_detect_line_endings',TRUE); // Für das Einlesen der CSV Datei $input = fopen('C:\temp\magic karten.csv','r'); // Mein CSV das ich im letzten Teil erstellt habe $output = fopen('C:\temp\Kartenpreise.txt', 'wt'); // Meine Zieldatei while ( ($data = fgetcsv($input,1000,',') ) != FALSE ) { $ch = curl_init(); $useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'; $url= utf8_encode("https://www.???.de/?mainPage=advancedSearch&cardName=".str_replace(' ','+',$data[0])."&idExpansion=".$data[3]."&manaCost=&convertedManaCostCompare=%3D&convertedManaCostValue=&powerCompare=%3D&powerValue=&toughnessCompare=%3D&toughnessValue="); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch,CURLOPT_USERAGENT, $useragent); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); $filestring = curl_exec($ch); curl_close ($ch); usleep(500000); // Der Höflichkeit halber stressen wir den Zielserver nicht allzusehr. $searchpattern = '/<td class="outerBottom col_Odd col_3 cell_[0-9]*_3"><[^>]*>(?<name_eng>.*)<\/a><\/td>\s*<td class="outerBottom col_Even col_4 cell_[0-9]*_4"><[^>]*>(?<name_deu>.*)<\/a><\/td>\s*<td class="outerBottom col_Odd col_5 cell_[0-9]*_5">(?<anz>\S*)<\/td>\s*<td class="outerBottom outerRight col_Even col_6 cell_[0-9]*_6">(?<preis>\S*)/'; if (!preg_match_all($searchpattern, $filestring, $treffer)) { echo $data[0]."\t".$data[2]."\t nicht gefunden\t !!!!!!!!!!\r\n"; continue; } echo $treffer['name_deu'][0]."\t".$treffer['name_eng'][0]."\t".$data[2]."\t".$treffer['anz'][0]."\t".$treffer['preis'][0]."\r\n"; fputs($output, $treffer['name_deu'][0]."\t".$treffer['name_eng'][0]."\t".$data[2]."\t".$treffer['anz'][0]."\t".$treffer['preis'][0]."\r\n"); } ini_set('auto_detect_line_endings',FALSE); fclose($input); fclose($output); ?> |
Als Ergebnis erhaltet ihr eine schöne CSV Datei die ihr wieder in einer Tabellenkalkulation öffnen könnt.