簡體   English   中英

如何使用Python中的BeautifulSoup迭代具有不同標識符的標記

[英]How can I iterate through tags with different identifiers with BeautifulSoup in Python

這可能是一個簡單的問題,但我想用id = dgrdAcquired_hyplnkacquired_0,dgrdAcquired_hyplnkacquired_1等來迭代這些標簽。

有沒有比我下面的代碼更簡單的方法呢? 問題是我拉出的每個網頁的這些標簽的數量會有所不同。 當每個網頁可能有不同數量的標簽時,我不確定如何獲取這些標簽中的文本。

html = """
<tr>
<td colspan="3"><table class="datagrid" cellspacing="0" cellpadding="3" rules="rows" id="dgrdAcquired" width="100%">
<tr class="datagridH">
<th scope="col"><font face="Arial" color="Blue" size="2"><b>Name (RSSD ID)</b></font></th><th scope="col"><font face="Arial" color="Blue" size="2"><b>Acquisition Date</b></font></th><th scope="col"><font face="Arial" color="Blue" size="2"><b>Description</b></font></th>
</tr><tr class="datagridI">
<td nowrap="nowrap"><font face="Arial" size="2">
<a id="dgrdAcquired_hyplnkacquired_0" href="InstitutionProfile.aspx?parID_RSSD=3557617&parDT_END=20110429">FIRST CHOICE COMMUNITY BANK                                                                                              (3557617)</a>
</font></td><td><font face="Arial" size="2">
<span id="dgrdAcquired_lbldtAcquired_0">2011-04-30</span>
</font></td><td><font face="Arial" size="2">
<span id="dgrdAcquired_lblAcquiredDescText_0">The acquired institution failed and disposition was arranged of by a regulatory agency.  Assets were distributed to the acquiring institution.</span>
</font></td>
</tr><tr class="datagridAI">
<td nowrap="nowrap"><font face="Arial" size="2">
<a id="dgrdAcquired_hyplnkacquired_1" href="InstitutionProfile.aspx?parID_RSSD=104038&parDT_END=20110429">PARK AVENUE BANK, THE                                                                                                    (104038)</a>
</font></td>
"""
soup = BeautifulSoup(html)
firm1 = soup.find('a', { "id" : "dgrdAcquired_hyplnkacquired_0"})
data1 = ''.join(firm1.findAll(text=True))
print data1

firm2 = soup.find('a', { "id" : "dgrdAcquired_hyplnkacquired_1"})
data2 = ''.join(firm2.findAll(text=True))
print data2

我會做以下,假設如果有n這樣的標簽,它們的編號0...n

soup = BeautifulSoup(html)
i = 0
data = []
while True:
    firm1 = soup.find('a', { "id" : "dgrdAcquired_hyplnkacquired_%s" % i})
    if not firm1:
        break
    data.append(''.join(firm1.findAll(text=True)))
    print data[-1]
    i += 1

在這種特殊情況下,正則表達式可能過度。
盡管如此,這是另一種選擇:

import re
soup.find_all('a', id=re.compile(r'[dgrdAcquired_hyplnkacquired_]\d+'))

請注意 :如果使用BS3,則s/find_all/findAll/g
結果(為了顯示的目的,刪除了一些空格):

[<a href="InstitutionProfile.aspx?parID_RSSD=3557617&amp;parDT_END=20110429" 
  id="dgrdAcquired_hyplnkacquired_0">FIRST CHOICE COMMUNITY BANK (3557617)</a>,
 <a href="InstitutionProfile.aspx?parID_RSSD=104038&amp;parDT_END=20110429" 
  id="dgrdAcquired_hyplnkacquired_1">PARK AVENUE BANK, THE (104038)</a>]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM