2017-01-13 2 views
1

Ich brauche Informationen über Software-Version und Build-Daten (vielleicht laden Dateinamen auch) von Seite download GIS "Panorama" Ich benutze Python und greifen. Jetzt habe ich so sctript:Python bekommen nächste Zeilen nach dem Abgleich

from grab import Grab 
g = Grab(log_file='out.html') 
g.go('http://www.gisinfo.ru/download/download.htm') 
for table in g.doc.select('//div[@id="article_header_rubric"]/following-sibling::table[2]'): 
#if test.text().startswith('Профессиона'): 
for tr in table.select('tr'): 
    type(tr.select('td')) 
    for td in tr.select('td'): 
    #if td.text().startswith('Профессиональная ГИС'): 
    print (td.text()) 

und das Ergebnis ist wie folgt:

Драйвер электронного ключа x86 (версия 6.20, 32-разрядные операционные системы, 
для Панорама 10 и выше) 
15.08.2013 
9,6 Mb 
drivers.zip 

Сервер Guardant Net (версия 5.5.0.10, для Панорама 10 и 11) 
25.07.2013 
4.1 Mb 
gnserver.zip 

Сервер Guardant Net (версия 6.3.1.713, для Панорама 12) 
11.10.2016 
4 Mb 
netkey6.zip 

Программа для диагностики ключей 
13.07.2016 
2,6 Mb 
diagnostics.zip 

als ich Filterung, was ich will:

from grab import Grab 
g = Grab(log_file='out.html') 
g.go('http://www.gisinfo.ru/download/download.htm') 
for table in g.doc.select('//div[@id="article_header_rubric"]/following-sibling::table[2]'): 
#if test.text().startswith('Профессиона'): 
for tr in table.select('tr'): 
    type(tr.select('td')) 
    for td in tr.select('td'): 
    if td.text().startswith('Профессиональная ГИС'): 
    print (td.text()) 

und führen jetzt:

Профессиональная ГИС 
Профессиональная ГИС "Панорама" (версия 12.4.0, для платформы "x64") 
Профессиональная ГИС "Панорама" (версия 12.3.2, для платформы "x64", на английском языке) 
Профессиональная ГИС "Карта 2011" (версия 11.13.5.7) 

Aber ich möchte Ergebnis wie folgt:

Профессиональная ГИС "Панорама" (версия 12.4.0, для платформы "x64") 
29.12.2016 
347 Mb 
panorama12x64.zip 

Профессиональная ГИС "Панорама" (версия 12.3.2, для платформы "x64", на английском языке) 
24.11.2016 
376 Mb 
panorama12x64en.zip 

Профессиональная ГИС "Карта 2011" (версия 11.13.5.7) 
11.01.2017 
263 Mb 
panorama11.zip 

Und Ideen?

+0

Es ist mir unklar, was mit 'einigen Zeilen nach mathing 'gemeint ist. –

+0

Ich mag so etwas wie dieser 'Профессиональная ГИС "Карта 2011"(версия 11.13.5.7) 2017.11.01 263 Mb panorama11.zip' – user3798175

+0

Es tut mir leid, das immer noch nicht klar, für mich ist. Bitte geben Sie ein Beispiel dafür, was Sie wollen, indem Sie Ihre Frage bearbeiten. –

Antwort

0

tr.select('td') gibt ein iterables zurück. In Ihrem aktuellen Code testen Sie die Zeichenfolge bei jeder Iteration, sodass Sie nur die erste drucken.

Sie sollten einen Iterator speichern, nehmen seinen ersten Wert und testen Sie es, und wenn es passt drucken alle Werte aus dem iterable:

for tr in table.select('tr'): 
    type(tr.select('td')) 
    it = iter(tr.select('td')) 
    td = next(it)  # process first field in row 
    if td.text().startswith('Профессиональная ГИС'): 
    print (td.text()) 
    for td in it: # print remaining fields 
     print(td.text()) 
+0

Vielen Dank, ich habe versucht, aber 'TypeError: 'SelectorList' Objekt ist kein Iterator – user3798175

+0

@ user3798175: Mein schlechtes. Ich hatte die 'Iter'-Funktion vergessen ... –

+0

und das Ergebnis ist first matching =) existiert in Python so etwas wie Grep? – user3798175

0

ok ist für mich wie folgt aus:

from grab import Grab 
g = Grab(log_file='out.html') 
g.go('http://www.gisinfo.ru/download/download.htm') 
list = [] 
for table in g.doc.select('//div[@id="article_header_rubric"]/following-sibling::table[2]'): 
for tr in table.select('tr'): 
    type(tr.select('td')) 
    for td in tr.select('td'): 
    list.append(td.text()) 
for i in list: 
indexi=list.index(i) 
if (i.startswith('Профессиональная ГИС "Панорама" (версия 12') and i.endswith('x64")')): 
    panorama12onsite = list[indexi] 
    panorama12onsitedata = list[indexi+1] 
elif i.startswith('Профессиональная ГИС "Карта 2011"'): 
    panorama11onsite = list[indexi] 
    panorama11onsitedata = list[indexi+1] 
elif (i.startswith('Профессиональный векторизатор "Панорама-редактор" (версия 12') and i.endswith('x64")')): 
    panedit12onsite = list[indexi] 
    panedit12onsitedata = list[indexi+1] 
elif i.startswith('Профессиональный векторизатор "Панорама-редактор" (версия 11'): 
    panedit11onsite = list[indexi] 
    panedit11onsitedata = list[indexi+1] 
    print (panorama12onsite) 
    print (panorama12onsitedata) 
    print (panorama11onsite) 
    print (panorama11onsitedata) 
    print (panedit12onsite) 
    print (panedit12onsitedata) 
    print (panedit11onsite) 
    print (panedit11onsitedata) 

Jetzt kann ich diese Variablen in anderen Teilen des Skripts verwenden (merge vs heruntergeladene Version und neu herunterladen, wenn vorhanden). Danke allen für die Hilfe

Verwandte Themen