我正在尝试使用漂亮的汤打印文本
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))
该网站的链接为:https://uk.finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch
答案 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)")