kontakt
Software house
>
Tag
>
Scrapy - technologia ułatwiająca scrapowanie stron internetowych
scrapy

Scrapy - technologia ułatwiająca scrapowanie stron internetowych

Data wpisu
Kamil Nahotko
Autor
Kamil Nahotko

Często programując korzystamy z dostępnych API, które dostarczają nam potrzebne dane do naszej aplikacji. Przykładowo budując aplikację, która będzie nam ukazywać aktualną pogodę, musimy skądś te dane wziąć i najczęściej korzystamy z dostępnych API na rynku, ale co w przypadku kiedy nie znajdziemy interesującego nas API. Właśnie w takim przypadku warto rozważyć, scrapowanie stron. W tym artykule przedstawię właśnie narzędzie, które pomoże nam w scrapowaniu stron.

Scrapy

Czym jest scrapowanie stron?

Scrapowanie stron jest to nic innego niż wyciąganie jakiejś zawartości strony i zapisywanie tych danych w celu np. wykorzystania ich w swojej aplikacji. Scrapowanie stron wykorzystują takie serwisy jak np. ceneo, google, czy też portale zbierające oferty pracy z innych portali. Pamiętajmy, że to co robimy później z takimi danymi może być czasami nielegalne.

Co to jest Scrapy?

Scrapy jest frameworkiem do języka Python i jest on najpopularniejszym i najbardziej rozbudowanym narzędziem do scrapowania stron internetowych. Scrapy dostarcza wszystkie niezbędne narzędzia potrzebne do efektywnego wydobywania danych ze stron, przetwarzania ich i przechowywania w preferowanej strukturze i formacie. Scrapy jest łatwy do użycia, posiada obsługę żądań asynchronicznych, a ponadto automatycznie dostosowuje prędkość indeksowania za pomocą mechanizmu “Auto-throttling”.

 

Scrapy Spider

Najważniejszą częścią w Scrapy są klasy Spider. Scrapy używa ich do zbierania informacji ze strony internetowej. Definiują one w jaki sposób nasz Spider ma wydobywać dane ze strony.

Przykładowa klasa Spidera, która wydobywa cytaty ze strony.

import scrapy

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    start_urls = [

        'https://quotes.toscrape.com/tag/humor/',

    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'author': quote.xpath('span/small/text()').get(),
                'text': quote.css('span.text::text').get(),
            }

        next_page = response.css('li.next a::attr("href")').get()

        if next_page is not None:
            yield response.follow(next_page, self.parse)

Taki kod zapisujemy do pliku “quotes_spider.py” i odpalamy naszego bota do scrapowania komendą:

scrapy runspider quotes_spider.py -o quotes.jl

Kiedy nasz bot skończy swoją pracę powinniśmy otrzymać plik “quotes.jl”, który będzie zawierać listę cytatów zapisanych w formacie json.

{"author": "Jane Austen", "text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d"}
{"author": "Steve Martin", "text": "\u201cA day without sunshine is like, you know, night.\u201d"}
{"author": "Garrison Keillor", "text": "\u201cAnyone who thinks sitting in church can make you a Christian must also think that sitting in a garage can make you a car.\u201d"}
...
Praca: #scrapy
0 brak aktywnych ofert pracy
Wszystkie oferty
Case study: #scrapy
0 Aktualnie brak case study
Zobacz wszystkie