【问题标题】:How to print html output each on its line in python?如何在python中的每一行打印html输出?
【发布时间】:2016-08-29 07:38:16
【问题描述】:

所以我正在做一个小项目,因为我是一个初学者,我正在做一些网页抓取。我想在python中使用beautifulsoup在一行上打印一首歌曲的歌词,但它是这样打印的:

今天早上我向外看,太阳已经消失打开一些音乐开始我的一天我迷失在一首熟悉的歌曲中我闭上眼睛我溜走了这不仅仅是一种感觉(不仅仅是一种感觉)当我听到那首老歌他们曾经玩过(不仅仅是一种感觉)我开始做梦(不​​仅仅是一种感觉)直到我看到玛丽安走开我看到我的玛丽安走开那么多人来了又走了他们的脸随着岁月的流逝而褪色但我仍然记得我徘徊on像夏日天空中的太阳一样清澈不仅仅是一种感觉(不仅仅是一种感觉)当我听到他们曾经演奏的那首老歌(不仅仅是一种感觉)我开始做梦(不​​仅仅是一种感觉)直到我看到玛丽安走路离开我看到我的玛丽安走开当我累了,心想冷了我躲在我的音乐里,忘记了白天和我曾经认识的一个女孩的梦我闭上眼睛,她溜走了她溜走了这不仅仅是一种感觉(不仅仅是一种感觉)当我听到他们曾经演奏的那首老歌(不仅仅是一种感觉)我开始做梦(不仅仅是一种感觉)直到我看到玛丽安走开

这是我的代码:

import urllib
from bs4 import BeautifulSoup

html = urllib.urlopen("http://www.metrolyrics.com/more-than-a-feeling-lyrics-boston.html")

bsObj = BeautifulSoup(html, "lxml")

namelist = bsObj.find_all("div", {"id": "lyrics-body-text"})

print("".join([p.get_text(strip=True) for p in namelist]))

【问题讨论】:

    标签: python html python-3.x web-scraping beautifulsoup


    【解决方案1】:

    您需要将strip = True 参数删除到get_text。这会剥离导致您看到的连接输出的字符串。

    通过删除它:

    print("".join([p.get_text() for p in namelist]))  
    

    打印效果很好。

    【讨论】:

    • 你好,我以前试过,但打印出来还是这样
    • 你好,strip False 正在做这项工作:) 你的语法也是如此,非常感谢:)
    【解决方案2】:

    试着把它写成一个简单的for循环

    for p in namelist:
        print(p.get_text(strip=True))
    

    【讨论】:

    • 你好,也是一样的:\
    • 如果您使用的是 Python 3,请尝试将 print 语句转换为 print(p.get_text(strip=True),end='\n')。或者尝试将 strip 参数设置为 False。
    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多