用漂亮的汤打印文字

时间:2020-08-21 15:25:57

标签: python html beautifulsoup

我正在尝试使用漂亮的汤打印文本

HTML代码如下:

<span class="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)" data-reactid="42" xpath="1"><span data-reactid="43">Before hours:</span><!-- react-text: 44 --> <!-- /react-text --><!-- react-text: 45 -->7:49AM EDT<!-- /react-text --></span>

我已经尝试了很多方法,但是似乎无法打印“ Before hours:”(早班时间:)和“美国东部时间上午7:49”。

编辑:这是我尝试过的

SpanTag = self.StockHttmlPageSoup.find_all("span",class_ ="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)")
SpanText = SpanTag.find_all('span')
print(SpanText.find(string=True))

编辑: enter image description here

该网站的链接为:https://uk.finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch

2 个答案:

答案 0 :(得分:1)

给出您原始帖子中的示例,以下效果很好。

from bs4 import BeautifulSoup

s = "<span class="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)" data-reactid="42" xpath="1"><span data-reactid="43">Before hours:</span><!-- react-text: 44 --> <!-- /react-text --><!-- react-text: 45 -->7:49AM EDT<!-- /react-text --></span>"

soup = BeautifulSoup(s, "html.parser")

print(soup.find("span", attrs={"class":"C($tertiaryColor) Fz(12px) smartphone_Fz(xs)"}).text.strip())

输出:Before hours: 7:49AM EDT

如果类<span>中有多个C($tertiaryColor) Fz(12px) smartphone_Fz(xs)元素,您可能希望运行

results = soup.findAll("span", attrs={"class":"C($tertiaryColor) Fz(12px) smartphone_Fz(xs)"})

将所有此类标签的列表返回到result变量以进行进一步处理。可以使用.text属性访问每个元素的内部文本,例如results[0].text.strip()函数可以应用于返回的文本,以删除任何前导/尾随空格,例如results[0].text.strip()

重要说明::以上内容并未解决有关异常处理的问题或soup.find() / soup.findAll()没有返回任何元素的情况,因此,最好将重点放在被问的问题。显然,编写代码以应对这些情况是很重要的。

答案 1 :(得分:0)

您尝试了没有“跨度”的尝试吗?

SpanTag = self.StockHttmlPageSoup.find_all(class_="C($tertiaryColor) Fz(12px) smartphone_Fz(xs)")