这是html:
<table>
<tr><td>1 EUR</td><td>4,2989</td></tr>
<tr><td>1 USD</td><td>3,7575</td></tr>
<tr><td>1 CHF</td><td>3,8245</td></tr>
<tr><td>1 GBP</td><td>4,7907</td></tr>
<tr><td>100 JPY</td><td>3,4727</td></tr>
</table>
我想打印4,2989
,3,7575
等数字。
我尝试了许多方法,但没什么用。例如:
for c in soup.children:
print(c.contents[1])
错误
for c in soup.children:
print(c.find("td")[1])
错误
for c in soup.children:
for cc in c.children:
print(cc)
错误
for c in soup.children:
print(c.next_sibling)
错误
答案 0 :(得分:2)
from bs4 import BeautifulSoup
soup = BeautifulSoup("""<table>
<tr><td>1 EUR</td><td>4,2989</td></tr>
<tr><td>1 USD</td><td>3,7575</td></tr>
<tr><td>1 CHF</td><td>3,8245</td></tr>
<tr><td>1 GBP</td><td>4,7907</td></tr>
<tr><td>100 JPY</td><td>3,4727</td></tr>
</table>""")
soup.children
仅返回一个标签,而正文返回一个标签,因此它将不起作用。
一种方法是使用find_all
方法,如下所示:
for x in soup.find_all('tr'): # Iterate over tr tags
print(x.find_all('td')[1].text) # find the second td tag and get its text
# Ouptput: 4,2989 3,7575 3,8245 4,7907 3,4727
请记住,这些数字是字符串,您需要先将其转换为浮点数
答案 1 :(得分:2)
首先,我认为您为什么会收到错误消息是因为.children
还将包含诸如'\ n'之类的行分隔符,如果将其视为bs4.element.NavigableString.
标签最有可能获得AttributeError:
import bs4
from bs4 import BeautifulSoup
html="""
<table>
<tr><td>1 EUR</td><td>4,2989</td></tr>
<tr><td>1 USD</td><td>3,7575</td></tr>
<tr><td>1 CHF</td><td>3,8245</td></tr>
<tr><td>1 GBP</td><td>4,7907</td></tr>
<tr><td>100 JPY</td><td>3,4727</td></tr>
</table>
"""
soup=BeautifulSoup(html,'html.parser')
table=soup.find('table')
for child in table.children:
print(repr(child))
输出
'\n'
<tr><td>1 EUR</td><td>4,2989</td></tr>
'\n'
<tr><td>1 USD</td><td>3,7575</td></tr>
'\n'
<tr><td>1 CHF</td><td>3,8245</td></tr>
'\n'
<tr><td>1 GBP</td><td>4,7907</td></tr>
'\n'
<tr><td>100 JPY</td><td>3,4727</td></tr>
'\n'
一种解决方案是仅处理非NavigableString的进程。
import bs4
from bs4 import BeautifulSoup
html="""
<table>
<tr><td>1 EUR</td><td>4,2989</td></tr>
<tr><td>1 USD</td><td>3,7575</td></tr>
<tr><td>1 CHF</td><td>3,8245</td></tr>
<tr><td>1 GBP</td><td>4,7907</td></tr>
<tr><td>100 JPY</td><td>3,4727</td></tr>
</table>
"""
soup=BeautifulSoup(html,'html.parser')
table=soup.find('table')
for child in table.children:
if type(child) is not bs4.element.NavigableString:
print(child.findAll('td')[1].text)
输出:
4,2989
3,7575
3,8245
4,7907
3,4727