gpt4 book ai didi

python - (HTML 抓取)列的 XPath 根据颜色而变化

转载 作者:行者123 更新时间:2023-12-01 01:36:52 24 4
gpt4 key购买 nike

我正在尝试解析 this website (with different stock tickers) 列中的所有值。我正在使用 Python 工作,并使用 XPath 来抓取 HTML 数据。

假设我想提取“Change”的值,当前为 0.62%(绿色)。我会先把树放到网站上然后说。

stockInfo_1 = tree.xpath('//*[@class="table-dark-row"]/td[12]/b/span/text()') 

然后我会得到一个值数组,最后一个元素恰好是更改值。

但是,我注意到,如果此列中的值有颜色,则它位于 /b/SPAN 中,而如果它没有颜色,则没有跨度,它只是在 /b 中。

解释一下:

stockInfo_1 = tree.xpath('//*[@class="table-dark-row"]/td[12]/b/span/text()') 

^此数组将包含此列中的每个彩色值

while stockInfo_1 = tree.xpath('//*[@class="table-dark-row"]/td[12]/b/text()') 

^将包含列中没有颜色的每个值。

每种库存的颜色不一致。有些股票具有带有颜色的随机值,有些则没有。因此这会扰乱 /b/span/b 数组的一致性。

如何获取每列中所有值(按顺序)的变量数组,无论它们是否在跨度中?我不关心颜色,我只关心值。

如果需要的话我可以解释更多。谢谢!!

最佳答案

可以直接跳过xpath中的中间标签,通过中间的//获取列表中的所有值。

所以片段应该是

tree.xpath('//*[@class="table-dark-row"]/td[12]/b//text()')

这会跳过 和 文本之间的所有中间标记。

我尝试过使用lxml。这是代码

import requests
from lxml import html
url="https://finviz.com/quote.ashx?t=acco&ty=c&ta=1&p=d"
resp=requests.get(url)
tree = html.fromstring(resp.content)
values = tree.xpath('//*[@class="table-dark-row"]/td[12]/b//text()')
print values

输出如下

['0.00%', '-2.43%', '-8.71%', '-8.71%', '7.59%', '-1.23%', '1.21', '0.30', '2.34% 2.38%', '12.05', '12.18', '1.04%']

Note: If you don't want to hardcode 12 in the above Xpath you can aslo use last() as tree.xpath('//*[@class="table-dark-row"]/td[last()]/b//text()')

Xpath cheat sheet供您引用。

Using "//" And ".//" Expressions In XPath XML Search Directives In ColdFusion

关于python - (HTML 抓取)列的 XPath 根据颜色而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com