웹 페이지 (스크립트를 실행할 때 URL이 전달됨)에서 일부 텍스트를 캡처하려고하지만 다른 속성이 할당되지 않은 단락 태그에 묻혀 있습니다. 모든 단락 태그의 내용을 수집 할 수 있지만 키워드 목록이 포함 된 모든 요소를 트리에서 제거하고 싶습니다.
다음과 같은 오류가 발생합니다.
tree.remove (elem) TypeError : 인수 'element'에 잘못된 유형이 있습니다 (예상되는 lxml.etree._Element, _ElementStringResult를 얻음).
트리를 반복하려고 할 때 반환되는 것이 잘못된 유형이라는 것을 이해하지만 대신 요소를 어떻게 얻습니까?
샘플 코드 :
#!/usr/bin/python
from lxml import html
from lxml import etree
url = sys.argv[1]
page = requests.get(url)
tree = html.fromstring(page.content)
terms = ['keyword1','keyword2','keyword3','keyword4','keyword5','keyword6','keyword7']
paragraphs = tree.xpath('//p/text()')
for elem in paragraphs:
if any(term in elem for term in terms):
tree.remove(elem)
당신의 코드에서 elem
입니다 _ElementStringResult
인스턴스 방법이있는 getparent
. 부모는 노드 Element
중 하나의 개체입니다 <p>
.
부모에는 remove
트리에서 제거하는 데 사용할 수 있는 메서드가 있습니다.
element.getparent().remove(element)
나는 더 직접적인 방법이 있다고 믿지 않으며 왜 방법이 없는지에 대한 좋은 대답이 없습니다 removeself
.
예제 html 사용 :
content = '''
<root>
<p> nothing1 </p>
<p> keyword1 </p>
<p> nothing2 </p>
<p> nothing3 </p>
<p> keyword4 </p>
</root>
'''
다음을 사용하여 코드에서이를 확인할 수 있습니다.
from lxml import html
from lxml import etree
tree = html.fromstring(content)
terms = ['keyword1','keyword2','keyword3','keyword4','keyword5','keyword6','keyword7']
paragraphs = tree.xpath('//p/text()')
for elem in paragraphs:
if any(term in elem for term in terms):
actual_element = elem.getparent()
actual_element.getparent().remove(actual_element)
for child in tree.getchildren():
print('<{tag}>{text}</{tag}>'.format(tag=child.tag, text=child.text))
# Output:
# <p> nothing1 </p>
# <p> nothing2 </p>
# <p> nothing3 </p>
의견을 보면이 코드가 작동하지 않는 것 같습니다. 그렇다면 html 구조에 대한 추가 정보를 제공해야 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다