slogan3

Maak een Ruby-script om gegevens te scrapen van een website

description

Gebruikers kunnen geautomatiseerd gegevens van websites extraheren, waardoor tijd en moeite worden bespaard. Het script wordt aangepast aan hun specifieke behoeften en bevat functies voor het omgaan met veelvoorkomende scraping-uitdagingen.

prompt

try_prompt

Help me een Ruby-script schrijven dat gegevens scrapt van de volgende website: {{website_url}}. Geef aan welke gegevens ik wil extraher ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld Ruby-script dat gegevens van een e-commerce website scrapt, specifiek de productnamen. Het script ondersteunt paginering en bevat foutafhandeling: ```ruby require 'nokogiri' require 'httparty' # Basis URL van de website BASE_URL = 'https://voorbeeld.com' # Methode om een pagina te scrapen def scrape_page(page_number) url = "#{BASE_URL}/pagina/#{page_number}" begin response = HTTParty.get(url, timeout: 10) if response.code == 200 parse_products(response.body) else puts "Fout bij het ophalen van pagina #{page_number}: HTTP #{response.code}" nil end rescue SocketError => e puts "Netwerkfout bij pagina #{page_number}: #{e.message}" nil rescue Net::OpenTimeout, Net::ReadTimeout => e puts "Timeout bij pagina #{page_number}: #{e.message}" nil rescue StandardError => e puts "Onverwachte fout op pagina #{page_number}: #{e.message}" nil end end # Methode om productnamen te extraheren uit HTML def parse_products(html) doc = Nokogiri::HTML(html) product_names = [] # Pas deze selector aan op basis van de daadwerkelijke HTML-structuur # Bijvoorbeeld: alle producttitels bevinden zich in <h2 class="product-title"> doc.css('h2.product-title').each do |product| product_names << product.text.strip end product_names end # Paginering page_number = 1 loop do puts "Scrapen van pagina #{page_number}..." product_names = scrape_page(page_number) break if product_names.nil? || product_names.empty? product_names.each do |name| puts "Product: #{name}" end # Voorbeeld: stop na 10 pagina's of pas het aan naar behoefte break if page_number >= 10 page_number += 1 end puts "Scraping voltooid." ``` **Toelichting:** - Het script gebruikt `HTTParty` voor HTTP-verzoeken en `Nokogiri` voor HTML-parsing. - Pas de CSS-selector `'h2.product-title'` aan afhankelijk van de daadwerkelijke structuur van de website. - Het script gaat door tot pagina 10, maar je kunt dat aanpassen of dynamisch maken door te stoppen bij een lege pagina. - Foutafhandeling is opgenomen voor netwerkproblemen, timeouts en andere onverwachte fouten. Zorg dat je de benodigde gems hebt geïnstalleerd: ```bash gem install nokogiri httparty ``` **Let op:** Controleer altijd de robots.txt en de gebruiksvoorwaarden van de website voordat je gaat scrapen.
provider: deepseek
model: deepseek-chat
Hier is een Ruby-script dat productnamen van een e-commerce website scrapet met paginering en foutafhandeling: ```ruby require 'nokogiri' require 'open-uri' require 'csv' class EcommerceScraper BASE_URL = 'https://voorbeeld.com' def initialize @product_names = [] end def scrape_products page_number = 1 while true begin puts "Bezig met scrapen van pagina #{page_number}..." # Bouw de URL voor de huidige pagina url = page_number == 1 ? BASE_URL : "#{BASE_URL}?page=#{page_number}" # Open de webpagina met timeout html = URI.open(url, read_timeout: 10, open_timeout: 10, 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' ).read # Parse de HTML doc = Nokogiri::HTML(html) # Zoek naar productnamen - PAS DIT SELECTOR AAN OP BASIS VAN DE WERKELIJKE WEBSITE product_elements = doc.css('.product-name, .title, h3') # Voorbeeld selectors if product_elements.empty? puts "Geen producten gevonden op pagina #{page_number}. Einde van paginering." break end # Extraheer productnamen products_on_page = product_elements.map do |element| element.text.strip end.compact.reject(&:empty?) if products_on_page.empty? puts "Geen productnamen gevonden op pagina #{page_number}" break end @product_names.concat(products_on_page) puts "Gevonden #{products_on_page.size} producten op pagina #{page_number}" # Controleer of er een volgende pagina is next_page_link = doc.css('a.next, a[rel="next"], .pagination .next').first break unless next_page_link page_number += 1 # Voorkom oneindige loops if page_number > 50 puts "Maximum aantal pagina's (50) bereikt" break end # Korte pauze om de server niet te overbelasten sleep(1) rescue OpenURI::HTTPError => e puts "HTTP Fout: #{e.message}" break rescue Net::ReadTimeout => e puts "Timeout fout: #{e.message}" break rescue SocketError => e puts "Netwerk fout: #{e.message}" break rescue StandardError => e puts "Onverwachte fout: #{e.message}" break end end save_to_csv display_results end def save_to_csv return if @product_names.empty? CSV.open('product_namen.csv', 'w') do |csv| csv << ['Productnaam'] @product_names.each do |name| csv << [name] end end puts "Productnamen opgeslagen in product_namen.csv" end def display_results if @product_names.any? puts "\n=== GESCRAPTE PRODUCTNAMEN ===" @product_names.each_with_index do |name, index| puts "#{index + 1}. #{name}" end puts "\nTotaal aantal producten: #{@product_names.size}" else puts "Geen productnamen gevonden" end end end # Gebruik de scraper begin scraper = EcommerceScraper.new scraper.scrape_products rescue => e puts "Fout tijdens uitvoering: #{e.message}" end ``` **Belangrijke aanpassingen die je moet maken:** 1. **CSS Selectors**: Pas de selectors in `doc.css('.product-name, .title, h3')` aan op basis van de werkelijke HTML-structuur van de website. 2. **Paginering**: Controleer hoe de paginering werkt op de website en pas de URL-constructie en volgende-pagina detectie aan. 3. **Installatie benodigde gems**: ```bash gem install nokogiri ``` **Kenmerken van dit script:** - ✅ **Paginering**: Houdt automatisch meerdere pagina's bij - ✅ **Foutafhandeling**: Behandelt timeouts, HTTP-fouten en netwerkproblemen - ✅ **Rate limiting**: Pauzeert tussen requests - ✅ **CSV export**: Slaat resultaten op in een bestand - ✅ **Timeout bescherming**: Voorkomt hangende requests - ✅ **User-Agent**: Gebruikt een realistische browser-identiteit **Let op**: Controleer altijd de `robots.txt` van de website en respecteer de servicevoorwaarden. Sommige websites staan scraping niet toe.