我正在尝试创建一个打印出来自/ r / jokes的前5个笑话的程序,但是我在格式化它看起来不错时遇到了一些麻烦。我想让它像这样出发。
Post Title: Post Content
例如,以下是直接来自RSS提要的笑话之一:
<item>
<title>What do you call a stack of pancakes?</title>
<link>https://www.reddit.com/r/Jokes/comments/3ix348/what_do_you_call_a_stack_of_pancakes/</link>
<guid isPermaLink="true">https://www.reddit.com/r/Jokes/comments/3ix348/what_do_you_call_a_stack_of_pancakes/</guid>
<pubDate>Sun, 30 Aug 2015 03:18:00 +0000</pubDate>
<description><!-- SC_OFF --><div class="md"><p>A balanced breakfast</p> </div><!-- SC_ON --> submitted by <a href="http://www.reddit.com/user/TheRealCreamytoast"> TheRealCreamytoast </a> <br/> <a href="http://www.reddit.com/r/Jokes/comments/3ix348/what_do_you_call_a_stack_of_pancakes/">[link]</a> <a href="https://www.reddit.com/r/Jokes/comments/3ix348/what_do_you_call_a_stack_of_pancakes/">[2 comments]</a></description>
</item>
我正在打印标题,然后是冒号和空格,然后是描述。但是它会打印所有文本,包括链接,作者和所有HTML标记。我如何才能获得段落标签内的文字。
谢谢,
编辑:这是我的代码:
d = feedparser.parse('https://www.reddit.com/r/cleanjokes/.rss')
print("")
print("Pulling latest jokes from Reddit. https://www.reddit.com/r/cleanjokes")
print("")
time.sleep(0.8)
print("Displaying First 5 Jokes:")
print("")
print(d['entries'][0]['title'] + ": " + d['entries'][0]['description'])
print(d['entries'][1]['title'] + ": " + d['entries'][1]['description'])
print(d['entries'][2]['title'] + ": " + d['entries'][2]['description'])
print(d['entries'][3]['title'] + ": " + d['entries'][3]['description'])
print(d['entries'][4]['title'] + ": " + d['entries'][4]['description'])
这只是获得前5个条目。我需要做的是在冒号后格式化描述字符串,只包括段落标记内的文本。
答案 0 :(得分:2)
Oren关于使用BeautifulSoup是正确的,但我会尝试提供更完整的答案。
d['entries'][0]['description']
返回html,你需要解析它。 bs是很棒的图书馆。
您可以使用以下方式安装它:
pip install beautifulsoup4
from bs4 import BeautifulSoup
soup = BeautifulSoup(d['entries'][0]['description'], 'html.parser')
print(soup.div.get_text())
从条目的div
部分获取文字。
答案 1 :(得分:0)
你可以使用精美的肥皂包
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.get_text())