python - 如何从 BeautifulSoup 中的表 td 中获取值?

标签 python beautifulsoup

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

<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

关于python - 如何从 BeautifulSoup 中的表 td 中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144389/

相关文章:

python:将列表转换为字符串,仅当 ','不存在时才添加 '|'

python - 使用Python根据多个字典对象获取最大值

python - BeautifulSoup提取物

python - 基于跨度文本的抓取站点

python - 使用 Python 解析嵌套的 HTML 列表

javascript - 使用 python 抓取动态加载的网站

python - 从单页网站获取所有与 BeautifulSoup 的链接 ('Load More' 功能)

python - 传递切碎的日期时间

python - 如何更改 scrapy 请求队列大小?如何实现严格的 DFO 命令

python - 如何用 pandas 和 matplotlib 绘制两个分类(名义)系列之间的比较