I det här inlägget kommer vi att lära oss webskrapa med Python. Med hjälp av python ska vi skrapa Yahoo Finance. Detta är en bra källa för aktiemarknadsdata. Vi kommer att koda en scraper för detta. Med hjälp av denna scraper kommer du att kunna skrapa aktiedata för vilket företag som helst från Yahoo Finance. Som ni vet gillar jag att göra saker och ting ganska enkla, därför kommer jag också att använda en web scraper som kommer att öka din skrapningseffektivitet.
Varför det här verktyget? Det här verktyget kommer att hjälpa oss att skrapa dynamiska webbplatser med hjälp av miljontals roterande proxies så att vi inte blir blockerade. Det ger också en clearingfunktion. Det använder headerless chrome för att skrapa dynamiska webbplatser.
Generellt sett delas webbskrapning upp i två delar:
- Hämtning av data genom att göra en HTTP-förfrågan
- Utvinning av viktiga data genom att analysera HTML DOM
Bibliotek & Verktyg
- Beautiful Soup är ett Python-bibliotek för att hämta data ur HTML- och XML-filer.
- Requests gör det möjligt att skicka HTTP-förfrågningar på ett mycket enkelt sätt.
- Webscraping-verktyg för att extrahera HTML-koden för mål-URL:n.
Setup
Vår setup är ganska enkel. Det är bara att skapa en mapp och installera Beautiful Soup & requests. För att skapa en mapp och installera bibliotek skriver du nedanstående kommandon. Jag antar att du redan har installerat Python 3.x.
mkdir scraper
pip install beautifulsoup4
pip install requests
Skapa nu en fil i den mappen med valfritt namn. Jag använder scraping.py.
För det första måste du registrera dig för scrapingdog API. Det kommer att ge dig 1000 GRATIS krediter. Sedan är det bara att importera Beautiful Soup & requests i din fil. så här.
from bs4 import BeautifulSoup
import requests
Vad vi ska skrapa
Här är listan över fält som vi ska extrahera:
- Previous Close
- Open
- Bid
- Ask
- Day’s Range
- 52 Week Range
- Volume
- Avg. Volume
- Market Cap
- Beta
- PE Ratio
- EPS
- Earnings Rate
- Forward Dividend & Yield
- Ex-Utdelning & Datum
- 1y target EST
Förberedelse av maten
Nu, Eftersom vi har alla ingredienser för att förbereda skrapan bör vi göra en GET-förfrågan till mål-URL:n för att få rå HTML-data. Om du inte är bekant med skrapningsverktyget uppmanar jag dig att gå igenom dess dokumentation. Nu ska vi skrapa Yahoo Finance för finansiella data med hjälp av requests-biblioteket som visas nedan.
r = requests.get("https://api.scrapingdog.com/scrape?api_key=<your-api-key>&url=https://finance.yahoo.com/quote/AMZN?p=AMZN&.tsrc=fin-srch").text
Detta kommer att ge dig en HTML-kod för den mål-URL:n.
Nu måste du använda BeautifulSoup för att parsa HTML.
soup = BeautifulSoup(r,'html.parser')
Nu har vi på hela sidan fyra ”tbody”-taggar. Vi är intresserade av de två första eftersom vi för närvarande inte behöver de data som finns inuti den tredje & fjärde ”tbody”-taggarna.
För det första kommer vi att ta reda på alla dessa ”tbody”-taggar med hjälp av variabeln ”soup”.
alldata = soup.find_all("tbody")
Som du kan märka har de två första ”tbody” 8 ”tr”-taggar och varje ”tr”-tag har två ”td”-taggar.
try:
table1 = alldata.find_all("tr")
except:
table1=Nonetry:
table2 = alldata.find_all("tr")
except:
table2 = None
Nu har varje ”tr”-tagg två ”td”-taggar. Den första td-taggen består av namnet på egenskapen och den andra har värdet på den egenskapen. Det är ungefär som ett nyckel-värdepar.
I det här läget ska vi deklarera en lista och ett lexikon innan vi startar en ”for”-slinga.
l={}
u=list()
För att göra koden enkel kommer jag att köra två olika ”for”-slingor för varje tabell. Först för ”table1”
for i in range(0,len(table1)):
try:
table1_td = table1.find_all("td")
except:
table1_td = None l.text] = table1_td.text u.append(l)
l={}
Nu har vi lagrat alla td-taggar i en variabel ”table1_td”. Sedan lagrar vi värdet av den första & andra td-taggen i en ”dictionary”. Sedan flyttar vi in ordlistan i en lista. Eftersom vi inte vill lagra dubbla data kommer vi att göra ”dictionary” tomt i slutet. Liknande steg kommer att följas för ”table2”.
for i in range(0,len(table2)):
try:
table2_td = table2.find_all("td")
except:
table2_td = None l.text] = table2_td.text u.append(l)
l={}
När du sedan i slutet skriver ut listan ”u” får du ett JSON-svar.
{
"Yahoo finance":
}
Är inte det fantastiskt. Vi lyckades skrapa Yahoo finance på bara 5 minuters inställning. Vi har en array av python Object som innehåller finansiella data för företaget Amazon. På det här sättet kan vi skrapa data från vilken webbplats som helst.
Slutsats
I den här artikeln har vi förstått hur vi kan skrapa data med hjälp av dataskrapningsverktyget & BeautifulSoup oavsett vilken typ av webbplats det rör sig om.
Känn dig fri att kommentera och fråga mig vad som helst. Du kan följa mig på Twitter och Medium. Tack för att du läser och tryck gärna på gilla-knappen! 👍
Att ytterligare resurser
Och där är listan! Vid det här laget bör du känna dig bekväm med att skriva din första webscraper för att samla in data från vilken webbplats som helst. Här är några ytterligare resurser som kan vara till hjälp under din resa för webbskrapning:
- Lista över proxytjänster för webbskrapning
- Lista över praktiska verktyg för webbskrapning
- BeautifulSoup-dokumentation
- Scrapingdog-dokumentation
- Guide to web scraping