我有以下表格:
<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>
我可以使用以下代碼遍歷 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')
我可以使用以下內容獲取文本:
for br in coauthor.find_all('br'):
firstcoauthor = (br.previousSibling)
print (firstcoauthor)
我想要到達的輸出是所有文本的結果,然后用分號 (;) 分隔,如下所示:ANGARA, EDGARDO J.;ENRILE, JUAN PONCE;MAGSAYSAY JR., RAMON B.;ROXAS, MAR;GORDON, RICHARD "DICK" J.;FLAVIER, JUAN M.;MADRIGAL, MA;ARROYO, JOKER P.;RECTO, RALPH 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.
我嘗試了替換功能,但無濟于事。
print (firstcoauthor.replace("\n", ";"))
和
print (firstcoauthor.replace("\r\n", ";"))
甚至像這樣逃避 \r\n 和 \n :
print (firstcoauthor.replace("\\n", ";"))
如何解決我的用例?
uj5u.com熱心網友回復:
認為通過將 join/delimiter 引數設定為來獲得該結果要簡單得多get_text():
soup.find('td').get_text(';')
根據您的示例,您將獲得:
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.
編輯
根據您的評論中提到的行為,額外的分號,我懷疑元素的結構與問題中的結構不同,并且有額外的中斷。
在這種情況下,我會改變策略并建議:
將附加
strip引數添加到get_text():soup.find('td').get_text(';', strip=True)或使用
join()fromstripped_strings,幾乎相同:';'.join(soup.find('td').stripped_strings)
示例 HTML
在 HTML 中添加了額外<br>的 、 空格和換行符。
html = '''
<table width="100%" border="0" cellspacing="2" cellpadding="0">
<tbody><tr>
<br>
<td >
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>'''
Output
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.
uj5u.com熱心網友回復:
選擇你想要的元素 - 我只是在td這里選擇......(但使用任何你有嵌入元素的br元素)
data = soup.select_one('td')
然后...用br分號替換所有元素:
for br in data.select('br'):
br.replace_with(';')
獲取元素的文本:
output = data.get_text()
# '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.;'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456933.html
上一篇:網頁抓取時如何繞過動態元素?
