Przejdź do głównej zawartości

Mateusz Buda
Paweł Kobojek

State of Web Scraping 2023 Survey

Hello everyone,

We are excited to announce our latest initiative: the 'State of Web Scraping 2023' survey. As a part of our ongoing efforts to better understand and contribute to the rapidly evolving landscape of web scraping, we are reaching out to everyone in the community - web scrapers, software developers, business owners, freelancers, and more, to participate in this comprehensive survey.

We understand that your time is valuable. That's why, as a token of our appreciation, all participants will receive a 50% discount on Scraping Fish, our robust web scraping API designed to simplify and streamline your web scraping tasks.

Mateusz Buda
Paweł Kobojek

Scraping Google SERP with geolocation

Google Search Engine Result Pages (SERP) 🔍 are an important source of information for many businesses. SERP includes organic search results, ads, products, places, knowledge graphs, etc. For example, by scraping Google SERP you can learn which brands have paid ads for specific keywords or analyze how your website is positioned.

One of the most important factors affecting what the user can see on a keyword's SERP is geolocation 🗺. We'll show you how to scrape Google SERP for a keyword from any location, regardless of the origin of your IP address. This can be done simply by setting search URL query parameters. It's also possible to parametrize and automate scraping 🤖 using a python script we share below.

Mateusz Buda
Paweł Kobojek

Scraping Walmart

In previous posts, we've already covered scraping publicly available data from Instagram and Airbnb. This time, we'll show you how to scrape walmart.com to collect data about products by category. Walmart is a rich source of data containing:

  • product details (including category and description) 📝
  • price 💰
  • features (e.g. nutrition facts for food) 🥦
  • availability 🛒
  • reviews ⭐️

As always, we share the code in GitHub repository to let you play with it and apply to your use case. To be able to run it and actually scrape the data, you need Scraping Fish API key which you can get here: Scraping Fish Requests Packs. A starter pack of 1,000 API requests costs only $2. Without Scraping Fish API you are likely to see captcha instead of useful product information.

Scraping use case

As a 🏃‍♂️ running example, we'll identify products from 🍔 food categories and scrape nutrition facts data for them. Based on collected data for over 15,000 products, we'll find out:

  • What is the share of products having sugar as the main nutrient?
  • Is there any relation between product rating and its nutrients?

Mateusz Buda
Paweł Kobojek

Build Your Own Mobile Proxy for Web Scraping

In this guide, we show how you can build your own mobile proxy pool step by step. The most common use case for mobile proxies is web scraping. If you have low success rate and keep getting blocked by websites you want to scrape, this guide is for you.

info

This guide is only applicable for a small, home-scale mobile proxy setup and does not cover some advanced intricacies of running mobile proxies, recovery from various modem failures, rotating proxies, etc.

If you need access to a reliable production-grade mobile proxy pool for web scraping, consider using our product.

What is a mobile proxy

One of the most important factors affecting success rate of web scraping is proxy quality. There are three main types of proxies:

  • Datacenter: offer large pool of cheap IP addresses belonging to datacenters and cloud server providers that are often blacklisted and usually not suitable for web scraping
  • Residential: provide IP addresses from Internet Service Providers (ISP) pool that are shared with other users
  • Mobile: the best class of proxies for web scraping that is based on ephemeral IP addresses which are frequently exchanged with mobile network users who move between Base Transceiver Stations (BTS)

Mobile proxies are the most expensive ones, but it can pay off to build your own pool by following this guide. We will show you how to change the IP address on demand so that you can generate thousands of IP addresses daily.

Paweł Kobojek
Mateusz Buda

Indie Hackers is a wonderful community for founders, a vast ocean of shared knowledge and a place to showcase your product journey. A lot of people are sharing their products there along with the revenue, often verified by Stripe. We analyzed the available data to check how much revenue are those products making and what are the most money making categories!

At the time of our analysis, there were total of 937 products with Stripe verified revenue. The information we gathered to make this analysis are revenue and product's categories.

Paweł Kobojek
Mateusz Buda

Rust jest stosunkowo nowym językiem programowania a rynek pracy dla Rusta nie jest jeszcze wysoko rozwinięty. Będąc jednak najbardziej lubianym przez deweloperów językiem, znajduje wielu zainteresowanych pracą przy jego użyciu programistów. Wśród programistów Rusta panuje dominujące przeświadczenie, że większość ofert pracy w Ruście dotyczy technologii blockchain. Z pewnością każdy kto kiedykolwiek szukał pracy w Ruście natknął się na ogłoszenie związane z kryptowalutami. Czy jest jednak faktem stwierdzenie, że większośc ofert dotyczy pracy przy crypto? Zescrapowaliśmy ogłoszenia pracy żeby poznać odpowiedź!

Paweł Kobojek
Mateusz Buda

Wykonywanie kroków JavaScript na scrapowanej stronie

Miło nam przedstawić nową, wyczekiwaną funkcjonalność - wykonywanie scenariuszy JavaScript! Wielu naszych klientów prosiło o udostępnienie możliwości interakcji ze scrapowaną stroną - klikania przycisków, wypełniania formularzy, wybierania opcji w elemencie <select> itd. Teraz jest to możliwe w API Scraping Fish i to bez umniejszenia naszego celu jakim jest utrzymanie naszego produktu tak prostego w użyciu jak to tylko możliwe.

Dlaczego jest mi to potrzebne?

W pewnych sytuacja podczas web scrapingu możesz chcieć nie tylko wczytać stronę, ale też na przykład wybrać opcję, poczekać aż dane się załadują, kliknąć przycisk, który staje się odblokowany dopiero po wykonaniu jakiejś akcji. A może musisz wypełnić formularz zanim interesujące Cię dane będą dostępne. W każdym z tych przypadków scenariusze JavaScript Ci pomogą!.

Czym jest scenariusz JavaScript?

Scenariusz JavaScript to seria kroków, które są wykonywane po załadowaniu strony jeden po drugim. Możliwe akcje to m.in. kliknięcie elementu wyspecyfikowanego selektorem, poczekanie aż element się pojawi albo wypełnienia pola tekstowego. Pełną listę akcji znajdziesz w dokumentacji. Przykład:

{
"steps": [
{"scroll": 1000},
{"wait_for": "#element-id"},
{"select": {
"selector": "#the-select-element",
"options": ["option1", "option2"]
}},
{"click_and_wait_for_navigation": "#button-id"}
]
}

Scenariusz przekazujesz za pomocą zeknodowanego obiektu JSON jako parametr query.

Przykład prawdziwego zastosowania

W celu szbkiej prezentacji możliwości tej nowej funkcjonalności, zescrapujemy jeden pokój z booking.com. Miej na uwadze, że ten kod działa na dzień publikacji tego postu i może przestać działać w wyniku zmian na stronie. Na potrzeby przykładu sprawdzimy cenę losowo wybranego hostelu. Żeby poznać dokładną cenę oraz ile kosztowałoby odwołanie musimy:

  1. Przejść do strony hotelu.
  2. Wybrać ile łóżek potrzebujemy.
  3. Kliknąć przycisk i poczekać na zakończenie nawigacji żeby pojawiły się żądane informacje.

Poniższe obrazki przedstawiają te kroki.

Dzięki naszej nowej funkcjonalności wszystko to można wykonać jednym requestem do API Scraping Fish.

import requests
import json
import datetime
from urllib.parse import quote_plus

checkin_date = datetime.date.today() + datetime.timedelta(30)
checkout_date = checkin_date + datetime.timedelta(1)

checkin = checkin_date.strftime("%Y-%m-%d")
checkout = checkout_date.strftime("%Y-%m-%d")

url = f"https://www.booking.com/hotel/pl/la-guitarra-hostel-gdansk.html?aid=304142&label=gen173nr-1FCAEoggI46AdIM1gEaLYBiAEBmAEeuAEHyAEP2AEB6AEB-AELiAIBqAIDuAKb8ZKUBsACAdICJDJmNDliMzMxLWIzYjEtNDQyNi1iNTdjLTljODIxNjg1M2Y3YdgCBuACAQ&sid=85334a8861a557bc4c65d6eabd08e1fe&all_sr_blocks=32277903_118755301_0_0_&checkin={checkin}&checkout={checkout}&dest_id=-501400&dest_type=city&group_adults=1&group_children=0&hapos=1&highlighted_blocks=32277903_118755301_0_0_0&hpos=1&lang=en-us&matching_block_id=32277903_118755301_0_0_0&no_rooms=1&req_adults=1&req_children=0&room1=A&sb_price_type=total&soz=1&sr_order=popularity&sr_pri_blocks=32277903_118755301_0_0_0__12452&srepoch=1652865196&srpvid=42cc40d5eaa90626&type=total&ucfs=1&lang_click=other&cdl=pl&lang_changed=1"

scenario = {
"steps": [
{"select": {"selector": "#hprt_nos_select_32277903_118755301_0_0_0", "options": "1"}},
{"click": ".txp-bui-main-pp"},
{"wait_for": ".bp-card--cancellation-schedule"}
# Możesz też zastąpić dwie linie powyżej: {"click_and_wait_for_navigation": ".txp-bui-main-pp"}
]
}

url = quote_plus(url)
scenario = quote_plus(json.dumps(scenario))

api_key = "[your API key]"
response = requests.get(f"https://scraping.narf.ai/api/v1/?api_key={api_key}&url={url}&js_scenario={scenario}")

print(response.content) # extract whatever info you want from this

I to wszystko! Proste jak zawsze.

Spróbuj sam!

To była szybka prezentacja przedstawiająca jak używać scenariusza JavaScript żeby pozyskać dane, których może potrzebować Twój biznes. Możliwości są nieskończone!

Zainteresowały Cię możliwości, które otwiera przed Tobą wykonywanie scenariuszy JavaScript? Możesz zacząć używać API Scraping Fish już od 8zł!

Paweł Kobojek
Mateusz Buda

Warszawa, ze względu na swoją historię a także znaczenie biznesowe, jest częstym celem biznesowych i turystycznych wypraw. Podróżnicy nierzadko wybierają apartamenty z Airbnb. Czy zastanawiałeś się jak wygląda rynek Airbnb w Warszawie? Jakiej ceny spodziewać się za pobyt (albo jakiej żądać jako gospodarz)? Na te i inne pytania możemy uzyskać odpowiedź z pomocą web scrapingu i podstawowej analizy danych! Pokażemy Ci jak bez wysiłku scrapować Airbnb pomimo, że ta strona używa renderowania JavaScript żeby wyświetlać ogłoszenia i przedstawimy prostą analizę danych.

info

W tym poście scrapujemy Airbnb w maju 2022. Jeśli Airbnb zmieni na swojej stronie coś z czego korzystamy, kod w tym poście może przestać działać. Jeśli natrafisz na jakiś problem, otwórz issue na GitHubie i zajmiemiy się tym.

Jak pobrać dane? Web scraping na ratunek!

Z pomocą Scraping Fish nie musisz być ekspertem od web scrapingu żeby móc łatwo pobrać dane o noclegach w Warszawie z Airbnb i użyć ich do wizualizacji i wyciągnięcia wartościowych wniosków. Wedle naszej wiedzy Airbnb samo nie publikuje ofert w formie łatwej do analizy (np. w pliku csv albo jako API). Niemniej jednak Airbnb jest publicznie dostępną stroną i można wyszukiwać i przeglądać oferty bez konieczności zalogowania się.

Mateusz Buda
Paweł Kobojek

Ten wpis jest kompleksowym samouczkiem dotyczącym zbierania informacji i postów z publicznego profilu na Instagramie za pomocą API Scraping Fish. Będziemy scrapować posty z profilu, który zawiera listę starych domów na sprzedaż, aby znaleźć najlepszą ofertę.

Przygotowaliśmy do tego wpisu pythonowy notebook udostępniony na GitHubie: instagram-scraping-fish. Aby móc go uruchomić i faktycznie zescrapować dane, potrzebujesz klucz do API Scraping Fish, o który możesz poprosić tutaj: Scraping Fish Kontakt. Otrzymasz darmowy pakiet startowy zawierający 1000 zapytań, aby uruchomić ten samouczek i samodzielnie wypróbować API. Bez klucza do API Scraping Fish prawdopodobnie zostaniesz natychmiast zablokowany ⛔️.

info

Należy zaznaczyć, że do scrapowania używamy prywatnego (nieudokumentowanego) API Instagrama, a udostępniany przez nas kod działa na stan z kwietnia 2022 roku. Jeśli Instagram zmieni coś w swoim API, na którym polegamy, ten samouczek może przestać działać i będzie musiał zostać dostosowany. Jeśli napotkasz jakiś problem, otwórz nowy issue na GitHubie, a my go zbadamy.

Przykład zastosowania

Jako przykład, aby przetestować możliwości Scraping Fish do scrapowania Instagrama, pobierzemy i przeanalizujemy dane z postów udostępnianych przez publiczny profil Stare domy 🏚. Zawiera on zbiorcze zestawienie ogłoszeń sprzedaży starych domów w Polsce. Opisy postów na tym profilu zawierają częściowo ustrukturyzowane dane o nieruchomościach, w tym lokalizację, cenę, rozmiar itp.