首页 > 解决方案 > 如何将 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

标签: pythonhtmlbeautifulsoup

解决方案


推荐阅读