【问题标题】:try to get a value from HTML but get unexpected value尝试从 HTML 中获取值但得到意外值
【发布时间】:2019-12-21 05:23:09
【问题描述】:

我尝试从这个网站提取市盈率: https://www.ishares.com/uk/individual/en/products/251787/

我正在尝试使用我在许多网站上看到的from lxml import html 方法。

我使用tree = html.fromstring(requests.get(url))获取xpath

我使用两种不同的方法: [1]val1 = tree.xpath(xp) [2]val2 = tree.xpath(xp+'/text()')

这里是示例代码:

# global imports
import requests
from lxml import html

'''
function to get data given a url and xpath
'''
def aFunctionForHTML(url, xp):

    #get the data
    resp = requests.get(url)

    if resp.status_code != 200:
        # This means something went wrong.
        print(resp.status_code)
        return None

    # generate the html tree
    tree = html.fromstring(resp.content)

    # get the xpath value
    val1 = tree.xpath(xp)
    val2 = tree.xpath(xp+'/text()')
    val = (val1, val2)
    return val



# the code starts here.
if __name__ == "__main__":

    url = 'https://www.ishares.com/uk/individual/en/products/253741/?switchLocale=y&siteEntryPassthrough=true'
    xp = '//*[@id="fundamentalsAndRisk"]/div/div[7]/span[2]'

    z = aFunctionForHTML(url, xp)
    print(z)

得到的值在这个<span>里面。在这种情况下 10.91

<span class="data">
10.91
</span>

响应产生结果(使用 2 种不同的方法)。 但是返回值(作为元组)是: ([&lt;Element span at 0x1d0dce655e8&gt;], ['\n21.79\n'])

如何获得 10.91?

【问题讨论】:

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


    【解决方案1】:

    aFunctionForHTML 函数返回一个元组,其中第一个元素是对实际 HTML 元素的引用,第二个值是包含该元素内容的列表。为了得到just来自z的文本,试试这个:

    text = z[1][0].strip()
    print(text)
    

    将打印

    "21.79"
    

    这是更新后的市盈率。

    或者,您可以更新 aFunctionForHTML 函数以仅返回元素的内容

    return val2[0].strip()
    

    然后只打印返回值(在本例中为z

    【讨论】:

    • 我根据您的建议将代码更改为`val = tree.xpath(xp+'/text()'),然后更改为text = z[0].strip(),这很有效。所以从这里我知道 tree.xpath 是一个数组。
    • @DarrenLefcoe 是正确的,因为单个选择可以返回多个元素。如果此答案对您有所帮助,请考虑支持/接受
    • 我投了赞成票。但是,排名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2016-04-21
    • 1970-01-01
    • 2021-12-06
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多