0

Pythonmechanizeモジュールを使用して単純なクエリを Web サイトに送信し、返された要素を分解して必要なデータを取得しています。しかし、返されるエスケープ シーケンスを正しく処理できないようです。ここに私のコードがあります:

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

対話型シェル経由で引数を渡すと、stripEscape 関数は正常に機能しますが、Web サイトの配列要素の 1 つが であり\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コードのこの部分は、要素ではなく要素のみを変更しますarrarr同じままになります。したがって、すべてのエスケープ シーケンスは削除されません。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 に答える