#python #parsing #beautifulsoup
Вопрос:
Мне нужно проанализировать информацию с сайта, на этом сайте есть 2 блока «Сегодня» и «Вчера», и у них одно и то же имя класса standard-box standard-list
. Как я могу проанализировать только первый блок (в разделе «Сегодня») подряд, не извлекая информацию из «Вчера», если они оба содержат одно и то же имя класса?
Вот мой код:
import requests
url_news = "https://www.123.org/"
response = requests.get(url_news)
soup = BeautifulSoup(response.content, "html.parser")
items = soup.findAll("div", class_="standard-box standard-list")
news_info = []
for item in items:
news_info.append({
"title": item.find("div", class_="newstext",).text,
"link": item.find("a", class_="newsline article").get("href")
})
Комментарии:
1. Пожалуйста, поделитесь URL-адресом
2. hltv.org, я пытаюсь разобрать новости
3. Да,у меня есть вся информация о названиях, что мне нужно
4. Могу ли я сделать так,чтобы последний пункт моей проанализированной информации должен быть <h2> <h2><Вчера>?
5. Что вы на самом деле пытаетесь сделать? Опубликуйте html, который вы пытаетесь очистить (не все! Только тот бит, который вы пытаетесь идентифицировать), если вопрос в том, «как мне получить этот конкретный тег из этого html».
Ответ №1:
При запуске предоставленного вами кода я не получаю вывод для items
. Однако вы сказали, что знаете, так что:
Если вы хотите получить данные только в разделе «Сегодня», вы можете использовать .find()
вместо .find_all()
, так .find()
как будет возвращен только первый найденный тег — «Сегодня», а не другие теги.
Итак, вместо:
items = soup.findAll("div", class_="standard-box standard-list")
Воспользуйся:
items = soup.find("div", class_="standard-box standard-list")
Кроме того, чтобы найти ссылку, мне нужно было получить доступ к атрибуту с помощью tag-name[attribute]
. Вот рабочий код:
news_info = []
items = soup.find("div", class_="standard-box standard-list")
for item in items:
news_info.append(
{"title": item.find("div", class_="newstext").text, "link": item["href"]}
)
print(news_info)
Выход:
[{'title': 'NIP crack top 3 ranking for the first time in 5 years', 'link': 'https://www.hltv.org/news/32545/nip-crack-top-3-ranking-for-the-first-time-in-5-years'}, {'title': 'Fessor joins Astralis Talent', 'link': 'https://www.hltv.org/news/32544/fessor-joins-astralis-talent'}, {'title': 'Grashog joins AGO', 'link': 'https://www.hltv.org/news/32542/grashog-joins-ago'}, {'title': 'ISSAA parts ways with Eternal Fire', 'link': 'https://www.hltv.org/news/32543/issaa-parts-ways-with-eternal-fire'}, {'title': 'BLAST Premier Fall Showdown Fantasy live', 'link': 'https://www.hltv.org/news/32541/blast-premier-fall-showdown-fantasy-live'}, {'title': 'FURIA win IEM Fall NA, EG claim final Major Legends spot', 'link': 'https://www.hltv.org/news/32540/furia-win-iem-fall-na-eg-claim-final-major-legends-spot'}]
Комментарии:
1. Спасибо,я ценю это.