0

我正在使用 Pythonmechanize模块向网站提交一个简单的查询,然后分解返回的元素以获取我需要的数据。但我似乎无法正确处理传回的转义序列。这是我的代码:

def stripEscape(string):    #credit goes to sarnold
    delete = ""
    i=1
    while (i<0x20):
        delete += chr(i)
        i += 1
    t = string.translate(None, delete)
    return t

def getHTML(metID):
    br = mechanize.Browser()
    response = br.open("http://urlgoeshere.com")

    br.form = list(br.forms())[0]
    br["PROMPT12"] = metID

    response = br.submit()
    htmlText = response.read()
    parseHTML(htmlText)

def parseHTML(htmlText):
    htmlText.index('table')
    arr = re.split(r'(</?\w{2}>)',htmlText)   # everything after background tag 
    logFile = open('Log.txt','wb')

    for ele in arr:
        ele = stripEscape(ele)
        if ele == '':
            arr.remove(ele)

    for ele in arr:
        logFile.write("ele: "+ele+'\n') 
        if re.match('/table', ele):
            logFile.write("END OF TABLE FOUND")
            logFile.write("\nele: "+ele+'\n')
            break
        # other element filters

当我通过交互式 shell 传递参数时,stripEscape 函数工作得很好,但是网站中的数组元素之一是\r\n</table>\r\n,这会“转义”我的过滤器。它被写入我的日志文件,如下所示:

ele: normal
ele: stuff
ele: 
</table>

ele: more
ele: normal

绕过过滤器的关闭表标签导致我所有其他过滤器都乱套了。有没有更好的方法来处理转义序列?

4

1 回答 1

1

您在第一个 for 循环中的 ele 元素不会保存到数组中。

for ele in arr:
    ele = stripEscape(ele)
    if ele == '':
        arr.remove(ele)

这部分代码只会改变ele元素而不是arr. arr将保持不变。所以所有的转义序列都不会被删除。arr您可以在该循环之后通过打印来测试它。

所以你需要做的就是把它保存为一个新的数组,然后可以被下一个循环使用。它可以是这样的:

for ele in arr:
    if ele != "":
        newArray.append(stripEscape(ele))


for ele in newArray:
    logFile.write("ele: "+ele+'\n') 
    if re.match('/table', ele):
        logFile.write("END OF TABLE FOUND")
        logFile.write("\nele: "+ele+'\n')
        break
于 2013-09-18T05:36:22.433 回答