Я использую модуль mechanize
Python для отправки простого запроса на веб-сайт, а затем разбиваю возвращаемые элементы, чтобы получить нужные мне данные. Но я не могу правильно обработать escape-последовательности, которые передаются обратно. здесь мой код:
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 работает очень хорошо, когда я передаю ее аргументы через интерактивную оболочку, но один из элементов массива с сайта - \r\n</table>\r\n
, и это "экранирует" мои фильтры. Он записывается в мой файл журнала так:
ele: normal
ele: stuff
ele:
</table>
ele: more
ele: normal
Тег закрывающей таблицы, минуя фильтр, заставляет все мои другие фильтры сглаживаться. Есть ли лучший способ обработки escape-последовательностей?
Элемент ele в первом цикле не сохраняется в массиве.
for ele in arr:
ele = stripEscape(ele)
if ele == '':
arr.remove(ele)
Эта часть кода будет меняться только ele
элемент не является arr
. arr
останется неизменным. Таким образом, все escape-последовательности НЕ будут удалены. Вы можете проверить его, напечатав 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