我在从我的xpath列表中删除元素时遇到问题。
我是一个在Python和HTML刮的新手,所以忍耐着我:)
我读过nodes.getparent().remove(nodes)
应该删除一个元素,但我甚至不能编译它。
因此,我似乎没有得到我需要能够删除的元素类型。
我可以毫无问题地拨打nodes.getparent()
,但不能删除。从xpath树中删除元素不起作用
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)
什么是你最初的目标是什么?你想要你的脚本做什么? – Andersson
您的XPath使用'text()'选择文本节点而不是元素节点,'remove'方法应该删除元素节点,而不是文本节点。此外,对于lxml和Python,文本节点的处理是特殊的,它们作为智能字符串返回,请参阅http://lxml.de/xpathxslt.html#xpath-return-values。至于你的问题,你能发表你正在解析的HTML代码片段,并解释你想删除哪些元素? –
谢谢您的回复。清单看起来像这样: ['\ r \ n \ t \ t','AC','\ r \ n \ t \ t \ t','\ r \ n \ t \ t \ t \ t ','Ace','\ r \ n \ t \ t \ t \ t','Cobra','\ r \ n \ t \ t \ t \ t','\ r \ n \ t \ t \ t','\ r \ n \ t \ t','\ r \ n \ t \ t','阿尔法罗密欧',....例如, AC是Ace和Cobra的父母,Alfa Romeo是一位新的父母,等等。看看https://bilmodel.dk/Sitemap/Biler,我的意思就更明显了。所以我只是想以直观的方式来看这个列表,所以很容易搜索。 有可能是一个mucher更容易做到这一点,而不是我正在往下走的路径;) – JesperSR