Wpis z mikrobloga

#programowanie #naukaprogramowania #python

Siema Mirki , próbuję scrapować stronę z listą artykułów o takiej strukturze:
https://pastebin.com/NvG2UAYd

Chciałem wyciągnąć:
title -> "search-item-heading"
readtime -> "article-read-time"
publish
date -> "article-publish-date"
i articleurl

używam bs4 z features='lxml'

Listę artykułów pobieram :

https://pastebin.com/GPLFU0gZ

kodall
articles = aticleslists.findall('li', {'class': 'search-page_grid-item search-pagegrid-item--article'})

Jak poprawnie pobrać itemy ?

for article in all_articles:
article_title = article.select_one("span[data-testid]").text
article_urls = article.findAll('a', {"class": 'search-page__tile-link'})
article_read_date = article.find('p', {"class": "article-attributes"}).contents[0].text
article_publish_date = article.find('p', {"class": "article-attributes"}).contents[1].text

Bo moje iterowanie lekko mówią jest do dupy - article
title , posiada w sobie '\n' i spacje
article_read i publish date w klasie article-attributes są dwa spany, próbowałem tutaj findallem wyciągać i potem iterować ale też nie wyświetla mi poprawnych danych.

Jak żyć i czy od razu usuwać konto ?
  • 2
article-read-time


@mangel123:

all_articles = article_list.find_all('li', {'class': 'search-page__grid-item search-page__grid-item--article'})

def clear(data: str):
return re.sub("\s+", " ", data.replace("\n", ""))

for article in all_articles:
article_title = clear(article.select_one("span[data-testid]").text.strip())
article_urls = article.findAll('a', {"class": 'search-page__tile-link'})
article_read_date = clear(article.select_one(".article-read-time").text.strip())
article_publish_date = clear(article.select_one(".article-publish-date").text.strip())
print(article_title)
print(article_urls)
print(article_read_date)
print(article_publish_date)

To że newline się nie wyświetla w HTMLu to zazwyczaj tylko i wyłącznie zasługa CSSa. Odpowiednie czyszczenie i da się pracować.