我需要从第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)
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())
答案 1 :(得分:0)
对我来说是这样的:
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)
现在我可以在脚本的其他部分使用此变量(合并vs下载版本并下载新版本,如果存在)。谢谢大家的帮助