从xpath树中删除元素无效

2024-10-06 10:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

从xpath列表中删除元素时遇到问题。
我是Python和HTML抓取的新手,所以请忍受我:)
我读过nodes.getparent().remove(nodes)应该删除一个元素,但我甚至不能编译它。
因此,我似乎没有获得需要删除的元素类型。
我可以毫无问题地调用nodes.getparent(),但不能删除。在

Error:

"TypeError: Argument 'element' has incorrect type (expected lxml.etree._Element, got lxml.etree._ElementUnicodeResult)"

谨致问候
杰斯珀

from lxml import html
import requests

headers = {'User-Agent': 'Fiddler', 'Host': 'bilmodel.dk'}

page = requests.get('https://bilmodel.dk/Sitemap/Biler', headers=headers)
tree = html.fromstring(page.content)

#This will create a list of car brands
CarBrands = tree.xpath('//*[@id="content"]/ul[1]//text()')
for nodes in CarBrands:
    if nodes.find('\r\n\t\t\t\t') == 0:
        print('Found it')
        nodes.getparent().remove(nodes)

# Press Enter to exit window
#CarBrand = input('Write car brand:')
print(CarBrands)

Tags: import元素htmlpagerequestslxmlxpathremove
1条回答
网友
1楼 · 发布于 2024-10-06 10:27:57

Question: I am not getting the element type that I need to be able to remove

要删除的元素是“特殊文本节点”,而不是删除,而是通过分配一个空白''来清除它。在

例如:

# Get all <li> inside <ul>[1]
 CarBrands = tree.xpath('//*[@id="content"]/ul[1]/li')

# Iterate all <li> Nodes
for node in CarBrands:
    # Findall <ul><li>...</li> ...
    li_nodes = node.findall('./ul/li')

    # Iterate all <li>
    for li in li_nodes:
        # Find the <a> inside <li>
        a = li.find('./a')

        # Clear "special text nodes"
        a.tail = ''
        print('a:{}'.format(etree.tostring(a)))

Output:

a:b'<a href="/Biler/AC/Ace/">Ace</a>'  
a:b'<a href="/Biler/AC/Cobra/">Cobra</a>'  

用Python:3.4.2测试

相关问题 更多 >