Skip to content

Menu

  • database acties
  • Maak blogpost met AI
  • raspiBlog code bibliotheek
  • Verzamelen data
  • welkom

Copyright 2024 - 2025 renegeilings.nl

Verzamelen data

Gedetailleerde Uitleg van de Python script getRTLnetBinnen.py

Het verzamelen van data wordt uitgevoerd voor nieuws websites van NOS, RTL en Omroepbrabant. Deze pagina biedt een gedetailleerde uitleg van alle functies in het Python-script getRTLnetBinnen.py wat gebruikt wordt om de nieuws website van RTL te lezen. De andere websites worden op een soortgelijke manier gelezen.

parse_relative_time(time_str)

Deze functie converteert relatieve tijdsaanduidingen (zoals “zojuist”, “gisteren” en “3 uur geleden”) naar absolute datetime-objecten.

def parse_relative_time(time_str):
    now = datetime.now()
    if time_str.strip().lower() == 'zojuist':
        return now
    if 'Gisteren' in time_str:
        return now - timedelta(days=1)
    match_hours = re.search(r'(\d+)\s*uur geleden', time_str)
    if match_hours:
        return now - timedelta(hours=int(match_hours.group(1)))
    match_days = re.search(r'(\d+)\s*dag geleden', time_str)
    if match_days:
        return now - timedelta(days=int(match_days.group(1)))
    return datetime.strptime(time_str, '%d %B %Y %H:%M')

extract_article_data(base_url, patterns)

Deze functie haalt artikel-URL’s op van de opgegeven website en filtert ze op basis van opgegeven patronen.

def extract_article_data(base_url, patterns):
    response = requests.get(base_url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        article_links = []
        found_urls = set()
        for link in soup.find_all('a', href=True):
            full_url = urljoin(base_url, link['href'])
            if any(full_url.startswith(pattern) for pattern in patterns):
                if full_url not in found_urls and not url_exists(full_url):
                    article_links.append(full_url)
                    found_urls.add(full_url)
        return article_links
    else:
        raise Exception(f"Error fetching page: {response.status_code}")

get_articles(article_url, runid)

Scraped de inhoud van een artikel en slaat deze op in de database.

def get_articles(article_url, runid):
    response = requests.get(article_url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")
        title = soup.find('title').text if soup.find('title') else 'Geen titel'
        meta_tag = soup.find('meta', {'property': 'article:published_time'})
        publication_time = meta_tag['content'] if meta_tag else None
        if publication_time:
            publication_time = datetime.strptime(publication_time, "%Y-%m-%dT%H:%M:%S.%fZ")
        class_pattern = re.compile(r"^css-[a-zA-Z0-9]+$")
        paragraphs = soup.find_all("div", {"data-testid": "text-paragraph", "class": class_pattern})
        all_scraped_text = "\n\n".join(p.get_text(strip=True) for div in paragraphs for p in div.find_all('p'))
        article_row = {}
        set_run_id(article_row, runid)
        set_full_url(article_row, article_url)
        set_text(article_row, all_scraped_text)
        set_title(article_row, title)
        set_pub_date(article_row, publication_time)
        insert_article(article_row)
    else:
        print(f"Error fetching page: {response.status_code}")

main()

Deze functie start het scrapingproces en verwerkt de gevonden artikelen.

def main():
    locale.setlocale(locale.LC_TIME, 'nl_NL.UTF-8')
    start_datetime = datetime.now()
    runid = add_new_row_rb_runs(start_datetime, 'C', Path(sys.argv[0]).stem)
    base_url = "https://rtlnieuws.nl/net-binnen"
    patterns = ['https://rtlnieuws.nl/nieuws/', 'https://rtlnieuws.nl/boulevard/']
    article_data = extract_article_data(base_url, patterns)
    for article_link in article_data:
        get_articles(article_link, runid)
    update_run_status(runid, 'none', 'V')

Deze pagina bevat een gedetailleerde uitleg van alle functies uit getRTLnetBinnen.py.

 

Welkom

  • welkom

Technische beschrijving

  • raspiBlog code bibliotheek
  • Verzamelen data
  • Maak blogpost met AI
  • database acties
juli 2025
M D W D V Z Z
 123456
78910111213
14151617181920
21222324252627
28293031  
« jun    

Copyright 2024 - 2025 renegeilings.nl