【问题标题】:Xpath Not Returning Values lxml PythonXpath不返回值lxml Python
【发布时间】:2017-03-21 16:38:05
【问题描述】:

我正在做一个项目,我试图让 lxml 从不同网页上的不同表格中提取股票数据。当我运行我的程序试图打印我试图拉的值时,我得到空括号

('Cash_and_short_term_investments:', [])
('EPSNextYear:', [])

这是我的称呼方式:

  #the url at this point is http://finviz.com/quote.ashx?t=RAIL confirmed with print statement
   url = driver.current_url
   page2 = requests.get(url)
   tree2 = html.fromstring(page2.content)
   EPSNextYear =              
   tree2.xpath('/html/body/table[3]/tr[1]/td/table/tr[7]/td/table/tr[2]/td[6]/b')
   #Original XPath:/html/body/table[3]/tbody/tr[1]/td/table/tbody/tr[7]/td/table/tbody/tr[2]/td[6]/b
   print ('EPSNextYear:', EPSNextYear)

和:

#the url at this point is https://www.google.com/finance?q=NASDAQ%3ARAIL&fstype=ii&ei=hGwhWNHVPOW7iwLMiIfIDA I've confirmed this with a print
url = driver.current_url
page3 = requests.get(url)
tree3 = html.fromstring(page3.content)
Cash_and_Short_Term_Investments = tree3.xpath('//*[@id="fs-table"]/tr[3]/td[2]/text()')
print('Cash_and_short_term_investments:', Cash_and_Short_Term_Investments)

我已经从 XPath 中删除了 tbody,就像一些类似的问题所建议的那样。任何帮助或建议将不胜感激,谢谢!

【问题讨论】:

    标签: python xpath web-scraping lxml


    【解决方案1】:

    在提出这样的问题时,您需要提供一个简短但完整的示例来说明问题。

    查看您的第二个示例,很明显您使用的 XPath 表达式不正确。您缺少 XPath 中的 tbody 元素。 (您可能希望通过查找您正在搜索的实际字符串来选择正确的表格行。)

    给定以下代码:

    from lxml import etree
    import urllib
    
    url="http://www.google.com/finance?q=NASDAQ%3ARAIL&fstype=ii&ei=hGwhWNHVPOW7iwLMiIfIDA"
    parser = etree.HTMLParser()
    tree = etree.parse(urllib.urlopen(url), parser)
    result = tree.xpath('//*[@id="fs-table"]/tbody/tr[normalize-space(td) = "Cash and Short Term Investments"]')
    for x in result: print etree.tostring(x)
    

    这样运行时:

    > python test.py 
    

    你会得到以下输出:

    <tr>
    <td class="lft lm">Cash and Short Term Investments
    </td>
    <td class="r">39.78</td>
    <td class="r">78.45</td>
    <td class="r">91.21</td>
    <td class="r">110.02</td>
    <td class="r rm">125.01</td>
    </tr>
    
    <tr>
    <td class="lft lm">Cash and Short Term Investments
    </td>
    <td class="r">110.02</td>
    <td class="r">161.49</td>
    <td class="r">184.49</td>
    <td class="r rm">140.49</td>
    </tr>
    

    我相信,一旦您将第一个示例变成问题的独立复制器,您就能够找出问题所在。

    【讨论】:

    • 这是获取字符串的一个很好的解决方案,然后我使用正则表达式和正则表达式来隔离数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2020-08-30
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多