使用BeautifulSoup的Python Web抓取,如何将两个<p>文本合并到列表的一个元素中

时间:2018-09-01 04:10:30

标签: html python-3.x beautifulsoup

我使用BeautifulSoup进行网络抓取,将结果放入列表中, html显示如下:

<p class="attrgroup">
            <span><b>2013 Volkswagen Passat</b></span>
            <br>
    </p>
<p class="attrgroup">
            <span>condition: <b>excellent</b></span>
            <br>
    </p>  
           
我的代码是:

title=[]
text=[]
for newpage in list:
webpage = urlopen(newpage).read()
soup = BeautifulSoup(webpage,'html.parser')
header=soup.find_all("span",attrs={"id":"titletextonly"})
info = soup.find_all("p",attrs={"class":"attrgroup"})
for h in header:
        title.append(h.get_text())
for m in info:
        text.append(m.get_text())

文本列表结果为:  [“ 2013 Volkswagen Passat”,“ condition:excellent”]

但是我想要这样的结果:  [“ 2013年大众帕萨特条件:优秀”]

在放入列表时如何合并两个文本?请帮忙!!!

2 个答案:

答案 0 :(得分:0)

使用列表的join()功能。

title = []
for h in header:
        title.append(h.get_text())
title = ''.join([title])

否则,将元素而不是文本添加到列表中,并使用list comprehension连接文本。

title = []
for h in header:
        title.append(h)
title = ''.join([i.text for i in title])

希望这会有所帮助!干杯!

答案 1 :(得分:0)

您可以使用stripped_strings

from bs4 import BeautifulSoup


html = """<p class="attrgroup">
        <span><b>2013 Volkswagen Passat</b></span>
        <br>
      </p>
      <p class="attrgroup">
        <span>condition: <b>excellent</b></span>
        <br>
</p>"""

tag = BeautifulSoup(html, 'html.parser')

data = (' '.join(tag.stripped_strings))
print data