Python ile Web Sayfasından veri çekmek


İyi günler

Bugün makalemizde python ile web sitesinden html içerik çekmeyi işleyeceğiz. Bu işlemi Pythonda BeutifulSoup kütüphanesi ile yapacağız. Bu kütüphane hakkında detaylı bilgi almak isterseniz  https://www.crummy.com/software/BeautifulSoup/bs4/doc linkini inceleyebilirsiniz
BeautifulSoup4 BeautifulSoup kütüphanesinin son sürümü olup, python2 ve python3'ü desteklemektedir.
Bildiğiniz üzere Bs3 sadece Python2'yi destekliyordu.
BeautifulSoup4, daha hızlı ve 3. parti parserlar ile ( lxml,html5lib) sorunsuz çalışabilmektedir.

Örnek uygulama:

Uygulamaya başlamadan önce BeautifulSoup4 kütüphanesin kurmamız gerekmektedir.(uygulama linux mint üzerinde çalıştırıldı )

2 yöntemle kurulum mümkün

1- apt-get install python-bs4
2- pip3 install Beautifulsoup4

Kurulumu tamamladıktan sonra kodlama kısmına geçebiliriz. Ben kodlama için Pycharm Ide kullanıyorum

Kod Açıklaması: 

#1 > BeautifulSoup kütüphanesini uygulamamıza import ettik

#2> BeautifulSoup tek başına web sitesini getirmeyecektir. Bu yüzden urllib kütüphanesini import etmemiz gerekmektedir.

#3>soup ediliyor

#4 > Beautiful Soup'un nimetlerinden faydalanma zamanı. İsteğinize göre filtreleme yapabilirsiniz.
bunun için find_all fonksiyonu kullanılmaktadır
soup.find_all('a',limit=1) komutu; web sitesinden çekilen verilerden, a tag'ı ile başlayan ilk veriyi getirir (çünkü limit 1 belirttik )

Örnek 1 Kodları :
#! /usr/bin/python
from bs4 import BeautifulSoup                    #1
import urllib.request                                      #2

url="https://www.programiz.com/"
url_oku=urllib.request.urlopen(url)
soup=BeautifulSoup(url_oku,'html.parser')   #3

print(soup.find_all('a',limit=1))                     #4

Örnek 1 çıktısı:
> python3 beautiful_s.py
[<a href="/" title="Programiz Home">Programiz Logo</a>]


Örnek 2: Web sayfasından div tag'ı içeren verilerden , class=content olan taglar'ı getirelim

#! /usr/bin/python
from bs4 import BeautifulSoup 
import urllib.request

url="https://www.programiz.com/"
url_oku=urllib.request.urlopen(url)
soup=BeautifulSoup(url_oku,'html.parser') 

aranan=soup.find_all('div',attrs={'class':'content'})

print(aranan[0])

veriler liste halinde çekildiği için ve tüm outputu görmek istemediğimizden sadece çekilen verilerden lstenin ilk elemanını ekrana yazdırdık

Örnek 2 Çıktısı

>python3 beautiful_s.py

<div class="content">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe height="0" src="https://www.googletagmanager.com/ns.html?id=GTM-TKXT7MH" style="display:none;visibility:hidden" width="0"></iframe></noscript>
<!-- End Google Tag Manager (noscript) --> </div>


Bu şekilde bir çok filtre kullanarak isteğinize göre filtreleme yapabilirsiniz.

örneklerimiz şimdilik bu kadar

Bol pythonlu günler









Yorumlar