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 回答