파이썬에서 html 파일을 구문 분석하고 목록에 내용을 저장해야합니다. 예 : 지금 여기파이썬에서 "<"문자로 인터럽트하는 (파싱하는) 파일의 일부를 읽는 방법은 무엇입니까?
def getTexte(fp,compte=0): #returns the text before a html tag
txt=""
pos=fp.tell() #stock the curr position for later use
tmppos=fp.tell() #same here
for car in fp.read():
if car=="<": #if we encounter the start of a html tag
fp.seek(tmppos) #we get back to juste before the html tag
break # and we leave this damn for
txt=txt+car #we concatenate each car in the string
tmppos=fp.tell() #and stock the pos for later use
if compte==0:
fp.seek(pos)
if txt!="":
return txt
샘플 내가 얻을 출력됩니다 : 여기 ['<html>', '<head>', '<meta name="robots" content="noindex">']
내가 buggish 기능에 지금 무엇을 가지고
['<p>', 'Blablabla', 'lablabla', 'ablabla', 'blabla', 'labla', 'abla', 'bla', 'la', 'a', '</p>']
그리고 난 이유를 이해할 수 없다 . 어쩌면 너무 피곤했다.
왜 BeautifulSoup와 같은 파서를 사용하지 않습니까? –
(1) HTML 파싱은 잘못된, 완전히 가짜 인 "마크 업"을 처리 할 때까지 해결 된 문제입니다. (2) 당신은 지금 토큰 화하고 있습니다. 파싱에는 훨씬 더 많은 것이 있습니다. (3) 렉서를 손으로 쓰는 것은 쉽지 않습니다. 손으로 전체 구문 분석기를 작성하는 것은 대부분의 구문 분석 작업에 비실용적입니다. (4) 손으로 직접 해보려한다면 가장 좋은 방법은 FSM입니다.regex (손으로 non-trivial FSM을 작성하는 것은 다시 매우 추악하고 불필요합니다). – delnan
아마 당신이 질문에 추가 할 수있는 가장 유용한 것은 당신이 해결하려고하는 진짜 문제에 대한 설명입니다. (예를 들어 왜 그 요소를 평평한 목록에 넣고 싶은지 명확하지 않거나, 요소로 묶인 텍스트를 어떻게 처리 할 것인지 등등) –