Bugün oldukça eğlenceli bir konu olan python ile interntet üzerinden bot ile veri çekeceğiz.  İnternet üzerinden python ile veri çekme işlemlerini iki tane modül kullanarak gerçekleştireceğiz.

Requests ve Beautiful Soup Modülü - Python Web Scraping

Bugün oldukça eğlenceli bir konu olan python ile interntet üzerinden bot ile veri çekeceğiz. İnternet üzerinden python ile veri çekme işlemlerini iki tane modül kullanarak gerçekleştireceğiz.

Bu modüller requests ve beautifulsoup modülleridir. 

Requests modülü internet sitelerine istekte bulunma işlemine yarar. Requets modülü  tarayıcı gerekmeksizin sitelere istek yapabilir.İstek sonucunda bize sitenin html kodlarını döndürür.

Beautifulsoup modülü ise request modülü ile gelen html kodlarını düzenli bir şekilde göstermeye yarar.

Bu modüller python kurulumu ile gömülü şekilde gelmemektedir. Modülleri kullanmak için kurulması gerekmektedir.

Windowsta kurulum için cmd ekranını açınız ve aşağıdaki satırları yazarak kurunuz.

pip install requests

pip install beautifulsoup4

Linuxta kurulum için; 

Terminali açın python-setuptools u kurunuz.

sudo apt-get install python-setuptools

Daha sonra şu komutları çalıştırın.

sudo pip3 install requests

sudo pip3 install beautifulsoup4

 

Aşağıdaki kodda haberler.com üzerinde bulunan haberleri çekme işlemleri çekmeye başlayabiliriz.

 

# -*- coding: utf-8 -*-
"""
Created on Fri Feb  8 21:08:10 2019

@author: Ertuğrul
"""

import requests
from bs4 import BeautifulSoup


url = "https://www.haberler.com/"

req = requests.get(url)

context = req.content

soup = BeautifulSoup(context, "html.parser")


print(soup.prettify())

print(soup.find_all("a"))

for i in soup.find_all("a"):
    print (i)
    print("---")


for i in soup.find_all("a"):
    # print(i.get("href"))
    print(i.text)
    print("***")



for i in soup.find_all("p",{"class": "haberler-title"}):
    print(i.text)


print("***")

request parametrisini kullanarak istenilen url istek atma işlemini gerçekleştirdik. prettify kullanarak gelen içeriği düzenli bir hale getirdik. 

find_all fonksiyonu kullanarak a etiketi ile olan içerikleri listeledik. Eğer tagların class ve id gibi değerlerini kullanmak istersek süslü parantez kullanarak istediğimiz şartı koyabiliriz.

Bazı siteler bot işlemlerine engel koyabilir. Böyle durumlarda tarayıcı bilgisini göndermeniz gerekir. Aşağıdaki gibi bir tarayıcı bilgisi göndererek engeli aşabilirsiniz.

req = requests.post(https://haberler.com, headers={'user-agent':'Mozilla/5.0 (Linux; Android 6.0.1; SM-G920V Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/531.26'}

 

Bir site üzerine atılan isteğin timeout süresi belirlenebilir.

req = requests.get('https://haberler.com', timeout=0.099)

 

Bir apiye istek atıp json veya xml veriler üzerinde çalışabiliriz. Aşağıdaki kodda fixer.io sitesine istek atıp Euro'nun diğer para birimlerinde karşılığını fixer.io sitesi üzerinden çektik.

# -*- coding: utf-8 -*-
"""
Created on Fri Feb  8 21:45:42 2019

@author: Ertuğrul
"""

import requests


url = "http://data.fixer.io/api/latest?access_key=d7ffc34cf6799f2d8beb7b9c052ea08c&format=1"

response = requests.get(url)


veri =  response.json()

try:
    print("Türk Lirası :",float(veri["rates"]["TRY"]))
    print("Amerikan Doları :", float(veri["rates"]["USD"]))
    print("İsviçre Frangı	 :", float(veri["rates"]["CHF"]))

except KeyError:
    print("Lütfen para birimlerini kontrol edin")

Bu yazıda requests ve beautifulsoup modüllerini kullanarak internet üzerinden veri çekme işlemlerini basit bir şekilde gerçekleştirdik. Eğer requests ve beautiful modülü hakkında detaylı bir bilgiye sahip olmak isterseniz bu linkteki siteyi ziyaret ediniz. Başka bir yazımda görüşmek üzere...

Bu Gönderiyi Paylaş

Yorumlar (1)

  • Hürol KESKİNKILIÇ

    Merhaba, öncelikle bilgi paylaşımınız için teşekkür ederim. Benim sorum; verdiğiniz örneğin tersi. Şöyle ki, PHP formdan PYTHON ip port adresine "id", "isim", "soyisim" değişkenlerinde gönderilen verileri Python adresi tetiklendiği anda GetData.Py isimli dosya tarafından okunmasını ve gelen bilgiyi bir değişkene aktarmak istiyorum. Ancak aşağıdaki kadar yapabildim. Url den Gelen bilgiyi ayrıştırıp, değişkene aktaramıyorum. Şimdiden teşekkür ederim. (Fazladan import yazmış olabilirim.) # Baslangic import requests from django.http import * from django.template import RequestContext import socket from bs4 import BeautifulSoup sunucuSoketi = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = 'localhost' port = 23456 Buffer_Boyutu = 1024 sunucuSoketi.bind((host, port)) sunucuSoketi.listen(5) print(port, "portu acildi ve baglantilar dinleniyor") baglantiAdedi = 1 def GETyontemi(request): # Eğer get gelirse ad = request.GET['ad'] soyad = request.GET['soyad'] print(ad) print(soyad) while True: print("*******************************************" ) print(baglantiAdedi, "nolu baglanti bekleniyor....") baglanti, istemciIPAdresi = sunucuSoketi.accept() # Baglanti talebi olusturuldu print("istemciden gelen", baglantiAdedi, "nolu baglanti kabul edildi") print('Baglanan istemci IP Adresi ve Portu:', istemciIPAdresi) print("Istemciden mesaj alinmasi bekleniyor...") while True: istemcidenGelenMesaj = baglanti.recv(Buffer_Boyutu) if not istemcidenGelenMesaj: break print("Istemciden mesaj geldi: ", istemcidenGelenMesaj) print("Istemciden mesaj alindi ve Buffer bosaldi.", baglantiAdedi, "nolu istemci ile baglanti kesiliyor...") baglanti.send(str(baglantiAdedi) '. baglantiyi kuran istemciydiniz. Baglandiginiz icin tesekkurler. Baglanti kesiliyor...') baglanti.close() print(baglantiAdedi, "nolu istemci ile baglanti kesildi.") baglantiAdedi = 1 # Sonuc

    2019-03-18 21:49:33

İçerik Hakkında Yorum Yapın

www.000webhost.com