python - 如何将 p 标签合并为一行 - beautfiulsoup
问题描述
#Extract Record
for person in soup.find_all(['b','h1']):
with open('test.csv', 'a') as csv_file:
writer = csv.writer(csv_file)
#Header
header_tag = soup.find_all('h1')[k]
k += 1
header = header_tag.text.strip().replace('\n', ' ').encode('windows-1252', errors='replace')
print(header)
#Name
name_tag = header_tag.find_all_next('p')[1]
name = name_tag.text.strip().replace('\n', ' ').encode('windows-1252', errors='replace')
print(name)
#writer.writerow([name])
#Workplace
workplace_tag = name_tag.find_all_next('i')[0]
workplace = workplace_tag.text.strip().replace('\n', ' ').encode('windows-1252', errors='replace')
print(workplace)
#writer.writerow([workplace])
#Abstract
while workplace_tag.find_all_next('p')[l] != 'h1':
abstract_tag = workplace_tag.find_all_next('p')[l]
abstract = abstract_tag.text.strip().replace('\n', ' ').encode('windows-1252', errors='replace')
l += 1
print(abstract)
#writer.writerow([abstract])
上面的代码输出了我需要的东西。除了有一个问题,当我尝试在 Abstract 中的代码底部组合 while 循环的 p 标签时,我遇到了问题。
使用print(abstract, end='')
不按预期工作。
并使用这种方法:
#Abstract
abstracts = ''
while workplace_tag.find_all_next('p')[l] != 'h1':
abstract_tag = workplace_tag.find_all_next('p')[l]
abstract = abstract_tag.text.strip().replace('\n', ' ').encode('windows-1252', errors='replace')
l += 1
abstracts += abstract.decode('windows-1252', errors='replace')
print(abstracts)
#writer.writerow([abstract])
这段代码几乎可以工作,但是它使我的 while 循环始终为真,因此无限打印相同的第一组 p 标签。
我目前使用我的代码可能得到的输出是:
Name
Workplace
Abstract A
Abstract b
Abstract c
但是我需要它看起来像:
Name
Workplace
Abstract A, Abstract b, Abstract c
解决方案
推荐阅读
- redirect - 如何在iis中从二级域到三级域进行URL重写
- azure - 缩短桌面应用程序的 Azure AD 访问令牌生命周期
- python - 搜索两个关键字的 arXiv API 问题
- python - 使用 Scipy/Python 简化一组线性方程
- javascript - JS:通过特定键将对象数组转换为对象
- r - 如何找到适合我的数据的幂函数以及如何绘制它
- java - 将使用 DES-EDE-CBC 的 Ruby 加密迁移到 Java 会产生不同的结果
- java - Eclipse 下“Java 构建路径”的“库”选项卡中何时显示“模块路径”?
- gdb - 在 GDB 中设置 RAW 值
- python - {已解决} 在 MySQL/Python 中使用转义字符创建插入查询