该计划的目标很简单,就是获得 tageschau.de 的头条新闻。 一开始很正常,但是运行几次后什么也得不到。
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
'AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/86.0.4240.111 Safari/537.36',
'Host': 'www.tagesschau.de',
'Referer': 'https://www.tagesschau.de/'
}
# get and parse the HTML of tageschau.de
URL = 'https://www.tagesschau.de/'
html = requests.get(URL, headers=headers)
html_parse = BeautifulSoup(html.content, 'lxml')
# find all headline in homepage
elements = html_parse.find_all('h4',{'class':'headline'})
for element in elements:
print(element.txt)
什么也没有。
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
但是当我使用
element
而不是
element.txt
时,有一些正确的输出
<h4 class="headline"><a href="/multimedia/livestreams/livestream3/">Live: tagesschau24</a></h4>
<h4 class="headline"><a href="/100sekunden/">100 Sekunden</a></h4>
<h4 class="headline"><a href="/multimedia/sendung/ts-39833.html">tagesschau 20 Uhr</a></h4>
<h4 class="headline"><a href="/multimedia/sendung/ts-39841.html">Letzte Sendung</a></h4>
<h4 class="headline">++ Fauci warnt vor "einer Menge Leid" ++</h4>
<h4 class="headline">Weniger Party, mehr Wellness</h4>
<h4 class="headline">November-Lockdown kostet 19 Milliarden</h4>
这让我如此很困惑,为什么?
你遇到这个问题的原因是,你正试图在一个不包含任何文本的BeautifulSoup
Tag
对象上使用
.txt
属性。在你的代码中,
element
是一个
h4
标签,它包含一个
a
标签,而文本内容(比如"Live: tagesschau24")实际上是在
a
标签内的。
你可以使用
.text
属性(而不是
.txt
)或者
.get_text()
方法来获取一个标签及其子标签中的所有文本。这两种方法都能正常工作。
下面是你的代码的修改版本:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
'AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/86.0.4240.111 Safari/537.36',
'Host': 'www.tagesschau.de',
'Referer': 'https://www.tagesschau.de/'
}
# get and parse the HTML of tageschau.de
URL = 'https://www.tagesschau.de/'
html = requests.get(URL, headers=headers)
html_parse = BeautifulSoup(html.content, 'lxml')
# find all headline in homepage
elements = html_parse.find_all('h4', {'class': 'headline'})
for element in elements:
# 使用 .text 或 .get_text() 获取文本内容
print(element.text.strip()) # 或 print(element.get_text(strip=True))
这段代码将打印出
h4
标签及其子标签内的所有文本内容。
.strip()
方法用于移除开头和结尾的空白字符。