2017-01-13 4 views
1

私はソフトウェアのバージョンとビルドに関する情報を取得する必要があります(ファイル名もロードしているかもしれません)。download GIS "Panorama" 私はPythonを使用しています。今、私はこのようなsctriptていますマッチ後に次の行を取得する

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()) 

、結果はこのようなものです:私は私が望むものをフィルタリングしたより

Драйвер электронного ключа 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 

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()) 

そして今、結果:

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

しかし、私はこのような結果が欲しい:

Профессиональная ГИС "Панорама" (версия 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 

アイデア?

+0

「数学の後のいくつかの行」が何であるかは不明です。 –

+0

私は申し訳ありませんが、この 'ПрофессиональнаяГИС "Карта2011"(версия11.13.5.7)のようなもの 2017年1月11日 263 Mbの panorama11.zip' – user3798175

+0

をしたい、これはまだ私には明確ではありません。あなたの質問を編集して、あなたが望むものの例を挙げてください。 –

答えて

0

tr.select('td')は、反復可能性を返します。現在のコードでは、各繰り返しで文字列をテストするので、最初の文字列だけを出力します。

あなたは、イテレータを格納し、その最初の値を取得し、それをテストし、それが印刷に一致した場合の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

ありがとうございます、私は試しましたが、 'TypeError: 'SelectorList'オブジェクトはイテレータではありません。' – user3798175

+0

@ user3798175:私の悪いです。私は 'iter'関数を忘れていた... –

+0

と結果はfirts matching =)はgrepのようなPythonに存在するのですか? – user3798175

0

は、このように私のためokです:

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) 

今私はスクリプトの他の部分でこの変数を使用することができます(マージバージョンとダウンロードされたバージョンをダウンロードし、存在する場合は新しいものをダウンロードすることができます)。助けてくれてありがとうございます

関連する問題