Python beautifulsoup - 获取由中断标记分隔的所有文本

sch*_*zch 1 python string replace beautifulsoup web-scraping

我有以下表格:

<table width="100%" border="0" cellspacing="2" cellpadding="0">
                      <tbody><tr> 
                        <td class="labelplain">ANGARA, EDGARDO J.<br>ENRILE, JUAN PONCE<br>MAGSAYSAY JR., RAMON B.<br>ROXAS, MAR<br>GORDON, RICHARD "DICK" J.<br>FLAVIER, JUAN M.<br>MADRIGAL, M. A.<br>ARROYO, JOKER P.<br>RECTO, RALPH G.<br></td>
                      </tr>
                    </tbody></table>
Run Code Online (Sandbox Code Playgroud)

我可以使用下面的代码遍历 HTML 的这一部分:

soup.find('td', text = re.compile('Co-author\(s'), attrs={'class': 'labelplain'}).find_next('td')
coauthor = soup.find('td', text = re.compile('Co-author\(s'), attrs={'class': 'labelplain'}).find_next('td')
Run Code Online (Sandbox Code Playgroud)

我可以使用以下内容获取文本:

for br in coauthor.find_all('br'):
  firstcoauthor = (br.previousSibling)
  print (firstcoauthor)
Run Code Online (Sandbox Code Playgroud)

我想要得到的输出是所有文本的结果,然后用分号(;)分隔,如下所示:ANGARA, EDGARDO J.;ENRILE, JUAN PONCE;MAGSAYSAY JR., RAMON B.;ROXAS, MAR;GORDON, RICHARD “迪克” J.;弗拉维尔,胡安 M.;马德里加尔,马萨诸塞州;阿罗约,小丑 P.;莱克托,拉尔夫 G.

但上面的代码给了我如下结果:

ANGARA, EDGARDO J.
ENRILE, JUAN PONCE
MAGSAYSAY JR., RAMON B.
ROXAS, MAR
GORDON, RICHARD "DICK" J.
FLAVIER, JUAN M.
MADRIGAL, M. A.
ARROYO, JOKER P.
RECTO, RALPH G.
Run Code Online (Sandbox Code Playgroud)

我尝试过替换功能,但没有效果。

print (firstcoauthor.replace("\n", ";"))
Run Code Online (Sandbox Code Playgroud)

和

print (firstcoauthor.replace("\r\n", ";"))
Run Code Online (Sandbox Code Playgroud)

甚至像这样转义 \r\n 和 \n :

print (firstcoauthor.replace("\\n", ";"))
Run Code Online (Sandbox Code Playgroud)

我如何解决我的用例?

Hed*_*Hog 5

认为通过将连接/分隔符参数设置为来获得该结果要简单得多get_text():

soup.find('td').get_text(';')
Run Code Online (Sandbox Code Playgroud)

根据您的示例,您将得到:

ANGARA, EDGARDO J.;ENRILE, JUAN PONCE;MAGSAYSAY JR., RAMON B.;ROXAS, MAR;GORDON, RICHARD "DICK" J.;FLAVIER, JUAN M.;MADRIGAL, M. A.;ARROYO, JOKER P.;RECTO, RALPH G.
Run Code Online (Sandbox Code Playgroud)

编辑

根据您的评论中提到的行为,额外的分号,我怀疑该元素的结构与问题中的结构不同,并且有额外的中断。

在这种情况下,我会改变策略并建议:

HTML 示例

<br>在 HTML 中添加了额外的、 空格和换行符。

html = '''
<table width="100%" border="0" cellspacing="2" cellpadding="0">
    <tbody><tr>
    
    <br>
           <td class="labelplain">
           ANGARA, EDGARDO J.<br>ENRILE, JUAN PONCE<br>MAGSAYSAY JR., RAMON B.<br>ROXAS, MAR<br>GORDON, RICHARD "DICK" J.<br>FLAVIER, JUAN M.<br>MADRIGAL, M. A.<br>ARROYO, JOKER P.<br>RECTO, RALPH G.<br> 
           
           <br>
           </td>
           </tr>
</tbody></table>'''
Run Code Online (Sandbox Code Playgroud)
输出
ANGARA, EDGARDO J.;ENRILE, JUAN PONCE;MAGSAYSAY JR., RAMON B.;ROXAS, MAR;GORDON, RICHARD "DICK" J.;FLAVIER, JUAN M.;MADRIGAL, M. A.;ARROYO, JOKER P.;RECTO, RALPH G.
Run Code Online (Sandbox Code Playgroud)