【问题标题】:Extracting text between the <span> tags with xpath in Python在 Python 中使用 xpath 提取 <span> 标记之间的文本
【发布时间】:2015-08-16 06:57:57
【问题描述】:

我正在尝试使用 python 从网站中提取指标:http://www.bild.de/regional/hamburg/mord/das-denkt-der-presserat-ueber-den-mord-an-unserer-tochter-lisa-41186944.bild.html

我需要黄色“LACHEN”按钮(现在为 149)下的文本(数字)。该特定元素的 XPath 是 //*[@id="jsm_16584"]/ul/li[1]/span

但是当我尝试查询它时它不会返回任何对象:

url = "http://www.bild.de/regional/hamburg/mord/das-denkt-der-presserat-ueber-den-mord-an-unserer-tochter-lisa-41186944.bild.html"
req=urllib2.Request(url)
tree = lxml.html.fromstring(urllib2.urlopen(req).read())
metric=tree.xpath('//*[@id="jsm_16584"]/ul/li[1]/span')
print metric

它以空列表的形式返回metric

【问题讨论】:

  • 你所追求的值是用javascript动态更新的。我认为您无法使用 xpath 提取它。
  • 有没有其他方法可以做到这一点?

标签: python html xpath


【解决方案1】:

urlopen 没有执行任何脚本,您只是获取原始 html,因此如果数据是由 javascript 生成的,则它们不会使用此方法呈现。像这样的东西应该可以工作:

import sys  
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  
from lxml import html

class Render(QWebPage):  
  def __init__(self, url):  
    self.app = QApplication(sys.argv)  
    QWebPage.__init__(self)  
    self.loadFinished.connect(self._loadFinished)  
    self.mainFrame().load(QUrl(url))  
    self.app.exec_()  

  def _loadFinished(self, result):  
    self.frame = self.mainFrame()  
    self.app.quit()  

url = 'http://www.bild.de/regional/hamburg/mord/das-denkt-der-presserat-ueber-den-mord-an-unserer-tochter-lisa-41186944.bild.html'  
r = Render(url)  
page = r.frame.toHtml()

tree = html.fromstring(page)
metric=tree.xpath('//button[@class="btn-mood-1"]/@data-mood-count')

print(metric)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2017-12-26
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多