Web scraping

Web scraping

Extrahera data med Beautiful Soup och Scrapy

Web Scraping

Web scraping handlar om att samla data från webbsidor automatiskt. I det här kapitlet utforskar vi två populära Python-bibliotek för detta: Beautiful Soup och Scrapy. Om du har läst om Beautiful Soup tidigare, kompletterar vi med fler exempel och introducerar Scrapy för mer avancerad scraping.

Vad är web scraping?

Web scraping innebär att programatiskt hämta och analysera innehåll från webbsidor. Vanliga användningsområden inkluderar:

  • Datainsamling: Extrahera priser, recensioner eller produktinformation.
  • Textanalys: Hämta blogginlägg eller artiklar.
  • Datauppdatering: Automatiskt samla och uppdatera datasets från webben.

Steg 1: Beautiful Soup – Grunderna

Beautiful Soup används för att analysera HTML och XML. Här börjar vi med ett grundläggande exempel där vi hämtar och analyserar en enkel webbsida.

Exempel: Extrahera rubriker från en webbsida

from bs4 import BeautifulSoupimport requests# Fetch the webpageurl = "https://example.com"response = requests.get(url)# Parse the HTMLsoup = BeautifulSoup(response.text, "html.parser")# Extract all headings (h1, h2, h3, etc.)headings = soup.find_all(['h1', 'h2', 'h3'])for heading in headings: print(heading.text.strip())Code language: PHP (php)

Output:

Example Domain

MetodBeskrivning
find_allHittar alla taggar som matchar listan
stripTar bort extra mellanrum i texten

Steg 2: Beautiful Soup – Navigera mer avancerat

Exempel: Extrahera länkar från en webbsida

# Extract all hyperlinkslinks = soup.find_all('a', href=True) # Find all <a> tags with an href attributefor link in links: print(link['href'])Code language: PHP (php)

Output:

https://www.iana.org/domains/example

Du kan även filtrera länkar baserat på specifika kriterier, t.ex. om de innehåller en viss text eller börjar med ett visst prefix.

Steg 3: Scrapy – Introduktion

Scrapy är en kraftfull web scraping-ram för större projekt. Här skapar vi en enkel spindel (crawler) för att samla rubriker från en webbsida.

Installation

Installera Scrapy:

pip install scrapy

Skapa ett projekt

Skapa ett nytt Scrapy-projekt:

scrapy startproject my_scraper

Strukturen ser ut så här:

my_scraper/
spiders/
__init__.py
example_spider.py
scrapy.cfg

Exempel: Skapa en enkel Scrapy-spindel

Skapa en fil example_spider.py i mappen spiders:

import scrapyclass ExampleSpider(scrapy.Spider): name = "example" start_urls = ["https://example.com"] def parse(self, response): # Extract headings from the page for heading in response.xpath('//h1 | //h2 | //h3'): yield {"heading": heading.get()}

Kör spindeln:

scrapy crawl example -o output.jsonCode language: CSS (css)
Scrapy-komponentBeskrivning
start_urlsLista över sidor att börja crawla från
response.xpathXPath-sökväg för att välja element

Sammanfattande kod: Beautiful Soup och Scrapy

Beautiful Soup: Samla länkar och rubriker

from bs4 import BeautifulSoupimport requestsurl = "https://example.com"response = requests.get(url)soup = BeautifulSoup(response.text, "html.parser")# Extract headingsheadings = [heading.text.strip() for heading in soup.find_all(['h1', 'h2', 'h3'])]print("Headings:", headings)# Extract linkslinks = [link['href'] for link in soup.find_all('a', href=True)]print("Links:", links)Code language: PHP (php)

Scrapy: Samla rubriker

import scrapyclass MultiPageSpider(scrapy.Spider): name = "multipage" start_urls = ["https://example.com"] def parse(self, response): # Extract headings for heading in response.xpath('//h1 | //h2 | //h3'): yield {"heading": heading.get()} # Follow links to other pages for next_page in response.css('a::attr(href)').getall(): if next_page: yield response.follow(next_page, self.parse)

Tips och vanliga fallgropar

Tips

  • Robotar och etikett: Kontrollera alltid en webbsidas robots.txt innan du börjar scrapea.
  • Delay: Använd en fördröjning (t.ex. med Scrapy’s DOWNLOAD_DELAY) för att undvika att överbelasta en server.
  • API istället för scraping: Om möjligt, använd API:er som oftast erbjuder samma data på ett mer strukturerat sätt.

Vanliga fallgropar

  • Dynamiska sidor: Beautiful Soup kan inte hantera JavaScript-genererat innehåll. Använd verktyg som Selenium om det behövs.
  • Felaktiga XPath/CSS-väljare: Dubbelkolla att dina sökvägar matchar HTML-strukturen.
  • Blockeringar: Webbplatser kan blockera din IP om du skickar för många förfrågningar snabbt.

Sammanfattning

Beautiful Soup är perfekt för enkla scrapingprojekt och manuell HTML-analys, medan Scrapy passar bättre för större projekt med flera sidor och dynamiska krav. Kombinationen av dessa verktyg ger dig kraften att hantera både små och stora web scraping-utmaningar. Lycka till!

Leave a Reply

Your email address will not be published. Required fields are marked *