【发布时间】:2015-02-15 17:01:15
【问题描述】:
我正在对表格中的文本数据进行网络抓取,例如以下表格,我希望获得结果:
Lorem ipsum
dolor sit amet
consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。
html = '''
<table>
<tr class="title last ">
<td>
Lorem ipsum
</td>
<td>
</td>
</tr>
<tr>
<td>
<span class="caps">dolor
</span>
sit amet
</td>
<td>
</td>
</tr>
<tr>
<td>
consectetur adipiscing elit,
</td>
<td>
</td>
</tr>
<tr>
<td>
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</td>
<td>
</td>
</tr>
<tr>
<td>
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</td>
<td>
</td>
</tr>
</table>
'''
我用 beautifulsoup4 解开了 <span> 元素:
soup = BeautifulSoup(html)
# remove <span> tag but keep content
spans = soup.find_all('span')
for tag in spans:
tag.unwrap()
但是,我为所有空的 <td> 元素提供了空行,或者“dolor sit amet”行不打印,即使我在使用 prettify 打印 html 时可以看到它。
# text with empty lines
for line in soup.find_all('td'):
print(line.get_text().strip())
print(line.string) # line with <span> prints None
# missing line <span>
for line in soup.find_all('td', text=re.compile(r'\w')):
print(line.get_text().strip())
print(soup.prettify())
我做错了吗?我怎样才能使用 unwrap() 并且仍然访问所有没有空行的文本内容?
感谢您的帮助!
【问题讨论】:
标签: html web-scraping beautifulsoup python-3.4