【问题标题】:BeautifulSoup search within resultsBeautifulSoup 在结果中搜索
【发布时间】:2021-04-18 03:34:39
【问题描述】:

我正在尝试从雅虎财经获取共同基金的年度业绩。他们的页面已设置,因此我想要的数据与许多其他行具有相同的类。没有唯一标识符。我可以索引到我想要的行,但使用不同的股票代码会导致页面发生变化,这也会改变我需要使用的索引,因此这将不起作用。

我想我可以在页面中搜索一些独特的文本,在本例中为“2010”,然后在我找到的“2010”值旁边获取“data-reactid="205"”数字,然后我可以递增“data-reactid”数字来找到我想要的代码行。希望这是有道理的。

这是我目前的测试代码:

import bs4
import requests
from bs4 import BeautifulSoup

url = requests.get('https://finance.yahoo.com/quote/APGAX/performance?p=APGAX')
soup = bs4.BeautifulSoup(url.text, features="html.parser")
ree = soup.find_all('span',attrs={"class": "W(10%) D(b) Fl(start) Ta(s)"})
print(ree)

运行该代码会导致页面出现大约 30 条不同的行(我试图将它们粘贴到此处,但该网站更改了我粘贴的行,因此我无法向您显示。

我要搜索的“2010”大约是列表下方的 1/3,而同一行中的“data-reactid="205"” 数字。问题是我不知道如何在结果中搜索以找到我想要的特定行。

有人对如何实现这一点有任何想法吗?谢谢您的帮助。对不起,我的描述不好。我对此很陌生,但正在尝试学习 Python。

【问题讨论】:

    标签: python beautifulsoup screen-scraping


    【解决方案1】:

    我建议您使用 Yahoo Finance API,而不是解析网页。有Python libraries for accessing the API

    【讨论】:

    • 感谢您的推荐。我查看了雅虎金融 API,它看起来非常好,但我看不出能够获得共同基金和 ETF 的年度业绩。我不想进行算法交易(此时),所以每日价格数据对我没有帮助。
    【解决方案2】:

    我希望这是您正在寻找的,但请清楚地描述问题。

    不要将 url 对象与“文本”绑定,而是将其与“内容”绑定

    url = requests.get('https://finance.yahoo.com/quote/APGAX/performance?p=APGAX')
    soup = bs4.BeautifulSoup(url.content, features="html.parser")
    
    

    要在特定行中搜索,最好先检查 html 标签以了解哪个标签具有您想要的内容,包括正确的类名或 id 名。例如,代码将如下所示..

    results = soup.find_all('span', class_='W(10%) D(b) Fl(start) Ta(s)')
    print(results)
    
    

    【讨论】:

    • 感谢您的回复,很抱歉我不清楚我要做什么。我试图从 2010 年到 2020 年为多个共同基金和 ETF 收集年度回报,并将它们放入 Excel 电子表格中。问题是雅虎财经网页上的许多字段具有相同的标签和类名。我可以使用索引来选择我想要的,但网页会根据它是基金还是 ETF 而发生变化,因此索引也会发生变化。
    • 我想如果我可以在该标签子集中搜索该特定表中的唯一内容(在本例中为 2010 年),那么我可以使用出现的“data-reactid="205"在同一行并增加它,然后使用“data-reactid="209" 再次搜索以收集该年的年度绩效,在本例中为 9.41%。我希望这比昨晚解释我要做什么的糟糕尝试更清楚。
    • 我环顾四周,试图理解与 .content 而不是 .text 的绑定,如果我理解的话,与非文本对象的内容绑定是与字节绑定的。我不确定在这种情况下这对我有什么帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2015-11-23
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多