🧲İnternet Üzerinden Veri Çekme
Python ile internet, web üzerinden veri alma, çekme (data grab, web grab)
💨 URL'den Veri Alma
Veri almanın en hızlı ve basit yolu
import urllib.request
contents = urllib.request.urlopen("http://example.com/foo/bar").read()
# Encoding işlemi için (https://stackoverflow.com/a/17615424/9770490)
encoding = "utf-8"
contents = contents.decode(encoding)
🆔 Web Kimliği UserAgent
Ayarlama
UserAgent
AyarlamaBazı web siteleri, isteklerin nereden geldiğini bilmeden hareket edemezler.
Bu sebeple isteği detaylandırmamız gerekmektedir.
UserAgent
ile hangi tarayıcıdan ve bilgisayardan bağlandığımızı belli ederiz
HTML
alanına bağlantıyı yazın,pd.read_html(html)
şeklinde kullanın
from urllib.request import urlopen, Request
HTML = "" # Örn: https://en.wikipedia.org/
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3'}
reg_url = HTML
req = Request(url=reg_url, headers=headers)
html = urlopen(req).read() # Pandas için kullanılacak html objesi
🧐 Tarayıcı Üzerinden Veriyi Bulma
CTRL + SHIFT + C kısayolu ile aradığınız elemanı ona tıklayarak seçin
Elements ekranından açılan satıra sağ tıklayın ve Copy → Copy selector deyin
Gelen metni bir notepad gibi bir yere kaydedin


🐍 Python Kodu ile Veriyi Çekme
pip install beautifulsoup4
komutu ile html verilerini işleme paketi olanbs4
paketini indirinpip install requests
ile html isteklerini yönetme paketi olanrequests
paketini indirinDaha önceden kopyaladığınız selector verisini ve veriyi aldığınız url bilgisini sırasıyla
SELECTOR
veURL
objelerine atayınİlk olarak kendimizi tanıttığımız
headers
verileri ileGET
isteği atıp, içeriği alıyoruz ve ardındansoup
objemiz ile istediğim selector ile elemanı alıyoruz
import requests
from bs4 import BeautifulSoup
SELECTOR = "#answer-24801950 > div > div.votecell.post-layout--left > div > div.js-vote-count.grid--cell.fc-black-500.fs-title.grid.fd-column.ai-center"
URL = "https://stackoverflow.com/questions/24801548/how-to-use-css-selectors-to-retrieve-specific-links-lying-in-some-class-using-be"
html = requests.get(
URL,
headers={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.58',
}
).text.encode("utf-8")
soup = BeautifulSoup(html, "html.parser")
selected_element = soup.select_one(SELECTOR)
📅 Tablo Verisi Alma
Web siteleri üzerindeki tabloları çekmek için
pd.read_html
kullanılırTüm tablo verileri arasında
0
,1
... değerleri ile gezinebiliriz.
import pandas as pd
import json
df = pd.read_html('https://en.wikipedia.org/w/index.php?title=Fortune_Global_500&oldid=855890446', header=0)[1]
fortune_500 = json.loads(df.to_json(orient="records"))
df

df_list = pd.read_html("https://en.wikipedia.org/w/index.php?title=Automotive_industry&oldid=875776152", header=0)
car_totals = json.loads(df_list[1].to_json(orient="records"))
car_by_man = json.loads(df_list[3].to_json(orient='records'))

👮♂️ Verilerin Sağlaması Gereken Özellikler
Günlük hayatta veriler istediğimiz kadar basit olmaz, bunlar üzerinde işlemler yaparak uygun hale getiririz
Tek tablodan oluşan basit veya bağlantılı bir kaç tablodan oluşan
Farklı veriler için mapping ile veri tipleri birbirine benzetilir
Kolay analiz edilebilir formatta olan
Makine öğrenimine sokulabilecek veriler
Düşük karmaşıklığa sahip
Yüksek boyutlu veriler için optimizasyon
Last updated
Was this helpful?