【问题标题】:getting text value using xpath with python使用 xpath 和 python 获取文本值
【发布时间】:2018-07-08 11:54:32
【问题描述】:
from lxml import html
import requests
url = 'https://www.bloomberg.com/quote/SPX:IND'
page = requests.get(url)
tree = html.fromstring(page.content)
num = tree.xpath('//*[@id="root"]/div/div/section[2]/div[1]/div/section[1]/section/section[2]/section/div[1]/span[1]/text()')
print (num)

这是我写的代码。我正在尝试从this 获取字符串 2758.82。但我得到的是。

[]

我从网站上复制了该部分的 xpath。我在这里看到了类似的问题,但它们没有帮助。我的代码有问题吗?

【问题讨论】:

  • 如果你仍然没有得到你想解析的数字,除了@Arount 已经建议的之外,你还需要做一件事。你需要定义一个像requests.get(url,headers={"User-Agent":"Mozilla/5.0"}) 这样的标题来让你的爬虫更像一个人。
  • 谢谢!!它现在正在工作。
  • 还有一件事..我如何访问像<div style="display:inline" data-dobid="dfn"><span>some text.</span></div> 这样的东西,如果<span> 也有一些属性呢?
  • 如果您想使用可见标签,请尝试使用 selenium,它可以让您解析您想要抓取的任何项目,考虑到它们的可见形式。

标签: python python-3.x xpath web-scraping


【解决方案1】:

这与 xpath 无关。这是关于页面是如何生成的。

如果您检查page.content 的内容,您会看到网页源中没有<div id="root" [..]>。 这是因为 HTML 内容主要是通过 Javascript 生成的。

但这不应该阻止你,如果你打开原始 html 源(来自page.content)并寻找你想要的值(2759.81),你会发现一个标签:<meta itemprop="price" content="2759.82" /> 和另一个@987654325 @,你可以使用其中之一:

print(tree.xpath('//*[@itemprop="price"]')[0].get('content'))

给予

2759.82

【讨论】:

  • 谢谢!!.. 来自page.content 是什么意思?我应该在实际页面源中寻找<meta itemprop="price" content="2759.82" /> 吗?因为当我打印page.content 时,我得到了一些未对齐的 HTML 文本,我在那里找不到<meta itemprop="price" content="2759.82" /> ......还有......当我尝试执行你建议的代码时......我得到IndexError: list index out of range
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 2022-12-18
  • 1970-01-01
  • 2019-03-08
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多