Используя BeautifulSoup, я пытаюсь извлечь очень специфический текст с веб-сайта, используя пользовательскую лямбда-функцию. Я изо всех сил пытаюсь выбрать именно то, что мне нужно, оставляя то, что мне не нужно.
<div class = "article__content">
<h3 class = "article__headline">
<span class = "article__label barrons">
Barron's </span>
<a class = "link" href = "https://www.marketwatch.com/articles/more-bad-times-ahead-for-these-6-big-tech-stocks-51652197183?mod=mw_quote_news">
More Bad Times Ahead for These 6 Big Tech Stocks
</a>
</h3>
<div class = "article__details">
<span class = "article__timestamp" data-est = "2022-05-10T11:39:00">May. 10, 2022 at 11:39 a.m. ET</span>
</div>
</div>
</div>
Я хочу извлечь только заголовок новости — в данном случае это «Больше плохих времен для этих 6 крупных технологических акций» и оставить раздражающий заголовок «Баррон».
Пока моя функция выглядит так:
for txt in soup.find_all(lambda tag: tag.name == 'h3' and tag.get('class') == ['article__headline']):
print(txt.text)
Я пробовал tag.name = "a" и tag.get('class') == ['link'], но это возвращает множество других вещей, которые мне не нужны, с веб-страницы...






Попробуйте селектор CSS h3 a (выберите все теги <a>, которые являются тегом внутри<h3>):
for title in soup.select("h3 a"):
print(title.text.strip())
Отпечатки:
More Bad Times Ahead for These 6 Big Tech Stocks
Если вы хотите быть более конкретным:
for title in soup.select("h3.article__headline a"):
print(title.text.strip())
это вернуло именно то, что мне было нужно. Спасибо за помощь.