python在匹配后获取下一行

python在匹配后获取下一行,python,filtering,Python,Filtering,我需要抓取有关软件版本的信息和建立数据(可能也加载文件名)从页面 我正在使用python和grab。现在我有一个类似这样的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-sibl

我需要抓取有关软件版本的信息和建立数据(可能也加载文件名)从页面 我正在使用python和grab。现在我有一个类似这样的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
Профессиональная ГИС "Панорама" (версия 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
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)
而不是过滤我想要的:

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)
但我想要这样的结果:

Драйвер электронного ключа 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
Профессиональная ГИС "Панорама" (версия 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
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)
和想法?

tr.select('td')
返回一个iterable。在当前代码中,每次迭代都要测试字符串,所以只打印第一个

您应该存储迭代器,获取其第一个值并对其进行测试,如果匹配,则打印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())
tr.select('td')
返回一个iterable。在当前代码中,每次迭代都要测试字符串,所以只打印第一个

您应该存储迭代器,获取其第一个值并对其进行测试,如果匹配,则打印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())

这样对我来说没问题:

Драйвер электронного ключа 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
Профессиональная ГИС "Панорама" (версия 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
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下载版本,如果存在,下载新版本)。谢谢大家的帮助

这样对我来说没问题:

Драйвер электронного ключа 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
Профессиональная ГИС "Панорама" (версия 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
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下载版本,如果存在,下载新版本)。感谢大家的帮助

我不清楚匹配后的一些行的
是什么意思
。我想要这样的
ПППБфаСааааааааСааааааааааааа1072。请通过编辑您的问题提供一个您想要的示例。我不清楚匹配后的一些行的
是什么意思。我想要这样的
ПБфааааааааааааааааааа1072017年1月11日263 Mb Panorama 11.zip
对不起,我还是不清楚。请通过编辑您的问题提供一个您想要的示例。谢谢,我已经尝试过了,但是python中确实存在类似grep的
TypeError:“SelectorList”对象不是迭代器
,结果是firts matching=),谢谢,我已经尝试过了,但是
TypeError:“SelectorList”对象不是迭代器,结果是firts matching=)在python中是否存在类似grep的东西?