【发布时间】:2017-07-29 11:02:15
【问题描述】:
我在从 xpath 列表中删除元素时遇到问题。
我是 Python 和 HTML 抓取方面的新手,所以请耐心等待 :)
我读过nodes.getparent().remove(nodes) 应该删除一个元素,但我什至无法编译它。
所以看起来我没有得到我需要能够删除的元素类型。
我可以毫无问题地拨打nodes.getparent(),但不能删除。
错误:
“TypeError:参数‘元素’的类型不正确(预期为 lxml.etree._Element,得到 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)
【问题讨论】:
-
你最初的目标是什么?你想让你的脚本做什么?
-
带有
//text()的XPath 选择文本节点而不是元素节点,remove方法应该删除元素节点,而不是文本节点。此外,对于 lxml 和 Python,文本节点的处理是特殊的,它们作为智能字符串返回,请参阅 lxml.de/xpathxslt.html#xpath-return-values。至于您的问题,您能否发布您正在解析的 HTML 的 sn-p 并说明您要删除哪些元素? -
感谢您的回复。该列表如下所示: ['\r\n\t\t', 'AC', '\r\n\t\t\t', '\r\n\t\t\t\t' , '王牌', '\r\n\t\t\t\t', '眼镜蛇', '\r\n\t\t\t\t', '\r\n\t\t\t ', '\r\n\t\t', '\r\n\t\t', '阿尔法罗密欧',.... AC 是 Ace 和 Cobra 的父母,Alfa Romeo 是新父母,等等。看看bilmodel.dk/Sitemap/Biler,我的意思就更明显了。所以我只是想以一种直观的方式列出这个列表,这样很容易搜索。而且可能有一种比我要走的路更简单的方法;)