如何从BeautifulSoup表的TD中获取价值?

2024-04-20Python开发问题
11

本文介绍了如何从BeautifulSoup表的TD中获取价值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个页面,其源代码中包含一些表:

<table width='100%' cellspacing='0' cellpadding='2' class="an">
    <tr>
        <td width='35%' align='right'>XXX :</td>
        <td><b>20</b></td>
    </tr>
    <tr><
        td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
</table>

<table width='361' cellspacing='0' cellpadding='2' class="an">
    <tr>
        <td width='35%' align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XX :</td>
        <td><a href='XXX'><b>XXX</b></a></td>
    </tr>
    <tr>
        <td align='right'>PHONE :</td>
        <td><b>518878943</b></td>
    </tr>
</table>

我想从此页面获取第二个表中的电话号码:

<td align='right'>PHONE :</td>
<td><b>518878943</b></td>

但是,我的代码:

page_src="""<table width='100%' cellspacing='0' cellpadding='2' class="an">
    <tr>
        <td width='35%' align='right'>XXX :</td>
        <td><b>20</b></td>
    </tr>
    <tr><
        td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
</table>

<table width='361' cellspacing='0' cellpadding='2' class="an">
    <tr>
        <td width='35%' align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XXX :</td>
        <td><b>XXX</b></td>
    </tr>
    <tr>
        <td align='right'>XX :</td>
        <td><a href='XXX'><b>XXX</b></a></td>
    </tr>
    <tr>
        <td align='right'>PHONE :</td>
        <td><b>518878943</b></td>
    </tr>
</table>
"""

soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
    row = ''
    rows = [row in div.findAll('tbody').findAll('tr')]

给我这样一条错误消息:

Traceback (most recent call last):
  File "test.py", line 198, in <module>
    rows = [row in div.findAll('tbody').findAll('tr')]
AttributeError: 'ResultSet' object has no attribute 'findAll'

如何解决此问题,并从页面获取电话号码?谢谢

编辑:

部分解决。部分原因是我认为我的解决方案很难看,但很管用。也许有人会想出更漂亮的解决方案?

tds = []
soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
    rows = div.findAll('tr')
    for row in rows :
        tds.append(row.findAll('td'))
phone = str(tds[12][1])
phone = phone.replace("<td><b>", "").replace("</b></td>", "").strip()
print phone

推荐答案

找到包含PHONE :td元素,然后获取following sibling element。一行:

soup.find("td", text="PHONE :").find_next_sibling("td").text

这篇关于如何从BeautifulSoup表的TD中获取价值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

pandas 有从特定日期开始的按月分组的方式吗?
Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)...
2024-08-22 Python开发问题
10

GROUP BY+新列+基于条件的前一行抓取值
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10