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
Technische beschrijving
M | D | W | D | V | Z | Z |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |