我想在雅虎财务页面中返回一些值。它们包含在标签中。我能够让它返回这些值
543.46
546.8
None
None
595.73
0.65
我遇到了无法获得的值。我应该返回“537.51 x 100”和“537.60 x 100”由于网站的原因,这些数字确实会发生变化。我只需要那种格式作为输出。我从源页面看到的特定html如下所示。此代码位于更多标记内,但BeautifulSoup并不关心。
<tr>
<th scope="row" width="48%">
Prev Close:</th>
<td class="yfnc_tabledata1">
543.46</td>
</tr>
<tr>
<th scope="row" width="48%">
Open:</th>
<td class="yfnc_tabledata1">
546.80</td>
</tr>
<tr>
<th scope="row" width="48%">
Bid:</th>
<td class="yfnc_tabledata1">
<span id="yfs_b00_aapl">
536.55</span>
<small> x
<span id="yfs_b60_aapl">
100</span>
</small>
</td>
</tr>
<tr><
th scope="row" width="48%">
Ask:</th>
<td class="yfnc_tabledata1">
<span id="yfs_a00_aapl">
536.63</span>
<small> x
<span id="yfs_a50_aapl">
100</span>
</small>
</td>
</tr>
<tr>
<th scope="row" width="48%">
1y Target Est:</th>
<td class="yfnc_tabledata1">
595.73</td>
</tr>
<tr>
<th scope="row" width="48%">
Beta:</th>
<td class="yfnc_tabledata1">
0.65</td>
</tr>
正如您所看到的,第三个和第四个值有一些额外的标签,例如和td标签内部,所以它返回None,我不想要。我的代码在这里:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://finance.yahoo.com/q?s=AAPL&q1=1")
soup = BeautifulSoup(html)
for data in soup.find_all('td', attrs = {'class': 'yfnc_tabledata1'} ) [0:6]:
print (data.string) #I have .string so it wouldn't print the tags, only the text. I would rather have it return strings before it needs to print.
我认为我需要在第一个内部使用另一个for循环来解释额外的标签或if语句。我不确定编码会是什么样的。
答案 0 :(得分:2)
就个人而言,我会为此做一个非常棒的方式:
from urllib2 import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://finance.yahoo.com/q?s=AAPL&q1=1")
soup = BeautifulSoup(html)
for data in soup.find_all('td', class_="yfnc_tabledata1")[0:6]:
if data.parent.name == "tr":
print (data.text)
输出:
>>>
543.46
546.80
536.50 x 100
536.60 x 100
595.73
0.65
>>>
工作得很好:))
注意:我为urlopen函数更改为urllib2。
您还可以使用以下任一项:
for data in soup.find_all('td', class_="yfnc_tabledata1")[0:6]:
print (data.text)
或
for data in soup.find_all('td', attrs={'class': 'yfnc_tabledata1'})[0:6]:
print (data.text)
答案 1 :(得分:1)
最短的答案是,在bs4中,他们添加了.strings
。
您的代码可能类似于:
for data in soup.find_all('td', attrs={'class': 'yfnc_tabledata1'})[0:6]:
print '--> ',(''.join(data.strings))
保留“\ n”字符,以便您可以根据自己的喜好去除和重新组合字符串。