2

私は同等のことをしようとしています_grep -B14 MMA

URL を開くと、多くの行が出力されます。したい

  1. 「MMa」を含む行を見つけます
  2. 次に、その前の14行目を印刷します

どこから始めればいいのかさえわかりません。

import urllib
import urllib2

url = "https://longannoyingurl.com"

opts = {
  'action': 'Dump+It'
}
data = urllib.urlencode(opts)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
print  response.read() # gives the full html output
4

3 に答える 3

7

read応答オブジェクトを単純に実行する代わりに、代わりに呼び出してreadlinesから、各行で正規表現を実行します。行が一致する場合は、その前の 14 行目を出力しますが、負のインデックス付けを行っていないことを確認してください。例えば

import re

lines = response.readlines()

r = re.compile(r'MMa')
for i in range(len(lines)):
    if r.search(lines[i]):
        print lines[max(0, i-14)]
于 2011-02-04T20:04:25.517 に答える
1

ダンのおかげで結果が得られました

import urllib
import urllib2 
import re

url="https://somelongannoyingurl/blah/servlet"
opts = {
  'authid': 'someID',
   'action': 'Dump+It'
}
data = urllib.urlencode(opts)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)

lines = response.readlines()
r = re.compile(r'MMa')
for i in range(len(lines)):
  if r.search(lines[i]):
    line = lines[max(0, i-14)].strip()
    junk,mma = line.split('>')
    print mma.strip()

于 2011-02-04T20:19:37.907 に答える
0

を使用して、単一の文字列を行のリストに分割できますmystr.splitlines()。を使用して、文字列が正規表現に一致するかどうかをテストできますre.match()。一致する行が見つかったら、行のリストに逆方向にインデックスを付けて、14 行前を見つけることができます。

于 2011-02-04T20:00:08.603 に答える