2012-05-19 4 views
2
for finding in soup.findAll(text=reg_compiled_keyword): 
    if finding.parent.name == "img": 
     continue 

    new_text = re.sub(reg_compiled_keyword,cls.keyword_replace_tmpl.format(escaped_kw,id,escaped_kw),finding) 

    finding.replaceWith(new_text) 

For 루프는 NavigableString 개체를 반환하고 replace 함수를 사용하면 잘못된 HTML을 발생시키는 특성 내의 텍스트도 바꿉니다.BeautifulSoup 찾기 및 바꾸기로 인해 HTML 문제가 발생합니다.

현재 NavigableString이 속성 내에있어 건너 뛸 수 있는지 어떻게 확인할 수 있습니까?

+0

find_all()은 속성 값인 NavigableString을 제공하지 않는다는 것을 알고 있습니다. 속성 값 내에있는 NavigableString을 가져 왔습니까? – Ansari

+0

문제를 나타내는 작은 HTML 샘플을 게시 할 수 있습니까? –

+0

안녕하세요, 반환 객체가 참으로 NavigableString이 아닌 Comment 객체라는 것을 알았습니다. 머리를 주셔서 감사합니다. @Ansari –

답변

0

find_all()은 속성 값인 NavigableString을 제공하지 않는다는 것을 알고 있습니다. 속성 값 내에있는 NavigableString을 가져 왔습니까?

당신이 어떻게 든 또는 틀렸다고 가정하면, 당신이 가지고있는 것이 속성 값인지 알아보십시오.

finding.string in finding.parent.attrs.values() 

)는

NavigableString finding이 속성 값인 경우이 True를 반환한다 (물론, 그 이전과 .parent.attrs .parent()되는 유효 사물이 확인).

finding이 속성 (속성 값 아님)인지 확인하려면 values()keys()으로 바꿉니다.

+0

답변을 주셔서 감사합니다. 답변으로 표시해야하는지 여부는 확실하지 않습니다. 너는 무엇을 제안 하는가? –

+0

글쎄, 내 대답을 약간 더 완벽하게 수정했다. 제 의견이 당신의 문제 해결에 도움이 되었기 때문에 기쁩니다. 나는 어떤 문자열이 속성이나 속성 값 내에 있는지 확인하는 방법에 대한 주된 질문에 답했습니다. 나중에이 질문을 건너 오면 유용 할 수 있습니다. 어쨌든 50 개의 현상금 포인트를 잃을 것입니다. 그래서 제안합니다. 답으로 표시 : P – Ansari

관련 문제