Python Kullanarak Otel Verilerini Kazıyın
Yayınlanan: 2018-08-212000 yılında kurulan Boston merkezli seyahat sitesi, dünya çapında en çok kullanılan seyahat portallarından biridir. Ancak bu kadar çok kullanıcı, otel, rezervasyon ve inceleme ile oluşturulan seyahat verilerinin büyüklüğünü anlayabilirsiniz. Şimdi bu verilerle ne yapacağımızı ve python kullanarak otel verilerini nasıl kazıyacağımızı görelim .
Otel Verilerini Kazıyarak Nasıl Yararlanabilirsiniz ?
Dünya turizminin rezervasyon endüstrisinin mega devi ile ilgili bazı önemli gerçekleri öğrendik. Şimdi önemli olan, onu taramaktan ve kazımaktan nasıl faydalanabileceğinizdir? Web sitesinin aksine, yalnızca belirli bir ülkedeki insanlara, hatta belki bir şehir veya yöredeki insanlara yemek veriyor olabilirsiniz. Özellikle işinizi yeni kuruyorsanız, her pansiyonu ve oteli haritalamak zor olabilir. Bu siteden veri tararsanız, her otelle ilgili aşağıdakiler gibi çeşitli ayrıntıları alırsınız:
- Ad Soyad
- Temsili Resim
- Tam adresi
- Oda Fiyat Aralığı
- Derecelendirmeler
- İncelemeler
Bu kadar çok veriyle, rakiplerinizin fiyatlarını kolayca izleyebilir ve incelemeler aracılığıyla kullanıcıların çeşitli mülkler hakkında neler söylediğini anlayabilirsiniz. Aşağıda, fiyatlandırma verilerinin ve müşteri incelemelerinin önemli uygulamaları verilmiştir:
- Fiyatlandırma verilerinden rekabetçi fiyatlandırma ve fiyatlandırma zekası
- OTA'ların marka fiyatlandırmanıza ve tutarlılığına bağlı kalmasını sağlamak
- Mevsime ve konuma göre envanter hareketini anlama
- Çevrimiçi itibar yönetimi için marka izleme
- Tüketici tercihlerini anlama
Bugün size, URL'ye sahip olduğunuz sürece, belirli bir otel için yukarıda belirtilen tüm verileri JSON biçiminde nasıl tarayacağınızı göstereceğiz.
JSON formatındaki verilere sahip olduğunuzda, bunları kendi NoSQL veritabanınızda saklayabilir ve gerektiğinde kullanabilirsiniz. Fiyatlara ihtiyacınız varsa, yalnızca fiyata erişebilirsiniz, birine temsili bir resim göstermeniz gerektiğinde onu da yapabilirsiniz vb. Daha önce kazınmış otel URL'nizin bir listesini tutarak geçmiş verileri güncellemek için bir sistem kurarken, veri tabanınıza kazımaya ve eklemeye devam edebilirsiniz. Büyük ölçekte böyle bir sistem, PromptCloud gibi deneyimli web kazıma çözümü sağlayıcılarının yardımıyla oluşturulabilir.
Öyleyse, temel bilgilerle başlayalım.
1. Bir Kaynak Kod Düzenleyici Ayarlama
Daha sonra verilen kod parçacığını kopyalamak ve düzenlemek için bir kod düzenleyiciye veya bir IDE'ye ihtiyacınız olacak. İkisi arasındaki temel fark, bir kod düzenleyicinin herhangi bir programlama dilinin kodunu düzenlemenize izin vermesi ve kodu düzenleyip kaydettikten sonra komut isteminden kodu çalıştırabilmenizdir. Ancak, PyCharm gibi bir IDE'de (Entegre Geliştirme Ortamı) kaynak kodu düzenleyici, derleme için otomasyon araçları ve hata ayıklayıcı gibi seçeneklere sahip olacaksınız. Hem IDE hem de Pycharm, Sublime ve Atom gibi kod editörleri için birden fazla ücretsiz seçenek vardır. Atom'u kullanmaya başlamak daha kolaydır, çünkü farklı programlama dilleri için eklenti paketlerinin yüklenmesi yoluyla IDE'lerde bulunan ek işlevlere izin verir. Bu atom için link- https://atom.io/

Web sitelerini ziyaret ettiğinizde, işletim sisteminizi ve uyumluluğunu (32-bit veya 64-bit) zaten algıladıklarını göreceksiniz. Buna bağlı olarak, size editörlerinin en son sürümünü sağlayacaklardır. İndir düğmesine tıklamanız yeterlidir.
Birçok kişi, kodlarını takip etmek için popüler bir sürüm oluşturma yazılımı olan Git'i kullanır. Siz de kullanırsanız, atom GitHub ile harika bir entegrasyon sağlar.
Atom kurulum dosyası yaklaşık 150MB olacaktır ve indirildikten sonra aşağıdaki açılır pencereyi görmek için üzerine tıklayabilirsiniz. Kurulum gerçekleşirken kalacaktır, bu nedenle bir veya iki dakika beklemeniz gerekebilir.

2. Atom Yükleyici
Atom kurulduktan sonra, daha önce tartıştığımız gibi, size bir IDE'nin bazı işlevlerini verecek olan bazı paketleri de kurabilirsiniz. Bu, otomatik tamamlama ve kolay hata ayıklama gibi özelliklerle kodlamayı sizin için kolaylaştıracaktır. CTRL+ virgül düğmesine basın (kontrol düğmesi ve virgül düğmesine aynı anda basın). Veya uzun bir yol kat edebilir ve Dosya >> Ayarlar >> Yükle'yi seçebilirsiniz. Burada arama çubuğuna Python yazabilir ve autocomplete-python gibi, yazarken önerilerde bulunmanıza yardımcı olacak, kodunuzu otomatik olarak tamamlamanıza yardımcı olacak farklı paketler alabilirsiniz.

Bilgisayarınızda mevcut kod dosyalarınız varsa (java dosyaları veya ruby dosyaları gibi), bunları atoma yükleyebilir ve nasıl göründüğünü görebilirsiniz. Atom tema değiştirme gibi daha birçok özellik var ama Google'dan biraz yardım alarak yapabileceğiniz keşif kısmı size kaldı.
3. Python'u Yüklemek
Herhangi bir nesne yönelimli programlama dilinde bazı temel programlama deneyimi önerilir. Bununla birlikte, bu Kendin Yap öğreticisi, kazıyıcıyı çalıştırmanıza ve temel anlayış elde etmek için verileri çıkarmanız için verilerinizi almanıza yardımcı olacaktır. Kurulumdan JSON görüntülemeye kadar her şeyi ele alacağız.
Öncelikle şu bağlantıyı ziyaret etmeniz gerekiyor – https://www.python.org/downloads.

Download Python 3.7.0 düğmesine tıklayın. Görüntülenen sürüm, web sitesini kaç gün sonra kontrol ettiğinize bağlı olarak daha yüksek olabilir. Ayrıca işletim sisteminize, Linux, Mac veya Windows'a bağlı olarak Python'un sürümü farklılık gösterebilir.
Kurulum dosyası indirildikten sonra üzerine tıklayabilir ve kur'u seçebilirsiniz. Talimatları izleyin ve Python'un nereye yüklenmesini istediğinizi seçin. İşte Python 3.7.0 32-bit sürümü için kurulum dosyasının ekran görüntüsü. Install Now tıklamadan önce her iki kutuyu da işaretlediğinizden emin olun. Python'un kurulmasını istediğiniz dizini değiştirmek gibi özelleştirmeler yapmak isterseniz, Customize Installation butonuna da tıklayabilirsiniz.
Kurulum tamamlandıktan sonra, her şeyin yolunda olup olmadığını görmek için bir python programı çalıştırabilirsiniz. Komut isteminden python programlarını çalıştırmak için herhangi bir Unix bilgisine sahip olmanız gerekmez. Yazmanız gereken tek şey python , ardından çalıştırmaya çalıştığınız dosyanın adını ve ardından enter tuşuna basın. .py uzantısı bir dosyanın bir Python dosyası olduğunu belirttiğinden, tüm dosyalarınızı bir .py uzantısıyla kaydetmeyi unutmayın. Şimdi bize iki sayının toplamını veren basit bir python programını deneyelim. Geçerli dizinde addition.py adında bir dosya oluşturacağız ve içine aşağıdaki kodu yazacağız-
[kod dili=”python”]
x = 5
y = 2
tanım ekle(a,b):
print(“+str(a)+” ve “+str(b)+” toplamı “+str(a+b))
ekle(x,y)
[/kod]
Daha sonra şunu kullanarak komut isteminden çalıştıracağız -
[kod dili=”python”]python ekleme.py[/code]
Bu, programı çalıştıracak ve size iki sayının toplamını gösterecektir. Çıkarma, bölme vb. için benzer fonksiyonlar yazabilir ve python hissini elde edebilirsiniz.

Python'da birkaç kişi yeniden kullanılabilecek işlevler yarattı. Bunlara Python libraries denir. Bunları programınıza aktararak kullanabilirsiniz, ancak bunu yapmadan önce, bu paketleri pip kullanarak yüklediğinizden emin olmanız gerekir. Pip , python ile birlikte gelen bir komut satırı paket yöneticisidir.

Bu ders için daha çok Beautiful Soup olarak bilinen BS4 kullanacağız. HTML ve XML dosyalarından veri almak için bir Python library . Ayrıştırma ağacında gezinmenin, aramanın ve değiştirmenin deyimsel yollarını sağlamak için herhangi bir ayrıştırıcıyla (veya varsayılan olarak lxml ayrıştırıcısıyla) çalışır. Bu, tek bir kod satırı kullanarak kazınmış html'deki verileri temizlemeye yardımcı olur. Bunu manuel olarak yapmak günler olmasa da saatler sürerdi.
Güzel çorba hakkında daha fazla bilgi için dokümantasyon sayfaları burada mevcuttur – Güzel Çorba (bs4).
Sisteminizde zaten kuruluysa (birinin daha önce sistemde python kullanması durumunda), komut satırınızda bu mesajı göreceksiniz -
"Gereksinim zaten karşılandı mesajı" .
Web Taraması Nasıl Yapılır?
Artık ortam ve metin düzenleyici kurulduğuna göre, asıl işe başlayabiliriz. Belirli bir otelin web sayfasından verilerin nasıl çıkarılabileceğini anlayacaksınız.
Kodu çalıştırdığınızda, bir url vermeniz istenecektir. Herhangi bir otel sayfasının URL'sini verebilirsiniz. Aşağıdakileri alacağız -
https://www..in/Hotel_Review-g1162480-d478012-Reviews-Radisson_BLU_Resort_Temple_Bay_Mamallapuram-Mahabalipuram_Kanchipuram_District_Tamil_N.html
Web sayfasını taramak için kod aşağıda verilmiştir. Bu programı çalıştırdıktan sonra, istendiğinde yukarıda belirtilen URL'yi girin. Herhangi bir sorun olması durumunda kod için bağlantı -
(https://drive.google.com/open?id=19xBkg4rKTxk7Vk6-TfxnNLa9GTcVvq3a)
[kod dili=”python”]
urllib.request, urllib.parse, urllib.error dosyasını içe aktarın
bs4'ten BeautifulSoup'u içe aktarın
ssl'yi içe aktar
json'u içe aktar
yeniden içe aktar
ithalat sistemi
sys.warnooptions değilse, uyarıları içe aktarın:
Warnings.simplefilter(“ignore”)#SSL sertifikası hatalarını yok saymak için
ctx = ssl.create_default_context()
ctx.check_hostname = Yanlış
ctx.verify_mode = ssl.CERT_NONE# url = input('url'yi girin – ' )
url=input(“Otel URL'sini Girin – “)
html = urllib.request.urlopen(url, bağlam=ctx).read()
çorba = GüzelSoup(html, 'html.parser')
html = çorba.prettify(“utf-8”)
hotel_json = {}
çorba.find_all('script',attrs={“type” : “application/ld+json”}) içindeki satır için:
ayrıntılar = satır.metin.şerit()
ayrıntılar = json.loads(detaylar)
hotel_json[“ad”] = ayrıntılar[“ad”]
hotel_json[“url”] = “https://www.<alan adı>.in”+detaylar[“url”]
hotel_json[“image”] = ayrıntılar[“image”]
ayrıntılar[“priceRange”] = ayrıntılar[“priceRange”].replace(“₹ “,”Rs “)
ayrıntılar[“priceRange”] = ayrıntılar[“priceRange”].replace(“₹”,”Rs “)
hotel_json[“priceRange”] = ayrıntılar[“priceRange”]
hotel_json[“aggregateRating”]={}
hotel_json[“aggregateRating”][“ratingValue”]=detaylar[“aggregateRating”][“ratingValue”]
hotel_json[“aggregateRating”][“reviewCount”]=details[“aggregateRating”][“reviewCount”]
hotel_json[“adres”]={}
hotel_json[“adres”][“Sokak”]=detaylar[“adres”][“sokakAdresi”]
hotel_json[“adres”][“Yer”]=detaylar[“adres”][“adresYer”]
hotel_json[“adres”][“Bölge”]=detaylar[“adres”][“adresBölge”]
hotel_json[“adres”][“Zip”]=detaylar[“adres”][“postaKodu”]
hotel_json[“adres”][“Ülke”]=detaylar[“adres”][“adresÜlke”][“ad”]
kırmak
hotel_json["incelemeler"]=[]
çorba.find_all('p',attrs={“class” : “partial_entry”}) içindeki satır için:
gözden geçirme = satır.metin.şerit()
eğer gözden geçirilirse != “”:
gözden geçirme = satır.metin.şerit()
eğer inceleme.bitiyorsa( “Daha fazla”):
gözden geçirme = gözden geçirme[:-4]
eğer inceleme.startswith(“Sevgili”):
devam et
gözden geçirme = gözden geçirme.replace('r', ' ').replace('n', ' ')
gözden geçirme = ' '.join(review.split())
hotel_json[“incelemeler”].append(inceleme)
dosya olarak open(hotel_json[“name”] + “.html”, “wb”) ile:
dosya.write(html)
open(hotel_json[“name”] + “.json”, 'w') dış dosya olarak:
json.dump(hotel_json, dış dosya, girinti=4)
[/kod]
Programı çalıştırıp verilen html'yi verdiğinizde, otelin adıyla aynı ada sahip bir json dosyası alacaksınız (Radisson BLU Resort Temple Bay Mamallapuram.json) ve aşağıda gösterildiği gibi görünecektir. Kolay kullanım için json bağlantısı –
(https://drive.google.com/open?id=1DQxkTLVUm8UAu7ByKh7NrqK3iBjME6MQ)
[kod dili=”python”]
{
“isim”: “Radisson BLU Resort Temple Bay Mamallapuram”,
“url”: “https://www.<domainname>.in/Hotel_Review-g1162480-d478012-Reviews-Radisson_BLU_Resort_Temple_Bay_Mamallapuram-Mahabalipuram_Kanchipuram_District_Tamil_N.html”,
"image": "https://media-cdn.<domainname>.com/media/photo-s/03/e5/92/9b/radisson-blu-resort-temple.jpg",
“priceRange”: “8.356 Rs – 36,027 Rs (Standart Oda için Ortalama Fiyatlara Göre)”,
"toplu Derecelendirme": {
“ratingValue”: “4.0”,
"incelemeSayısı": "2407"
},
"adres": {
“Sokak”: “57 Covelong Yolu”,
“Yer”: “Mahabalipuram”,
“Bölge”: “Tamil Nadu”,
"Zip": "603104",
“Ülke”: “Hindistan”
},
"incelemeler": [
“Sahilde bakımlı, genişleyen bir tatil köyü. En büyük yüzme havuzlarından birine, dönümlük çimenlik alana, çocuklar için birçok aktiviteye, iyi dekore edilmiş odalara, kriket oynamaya, voleybol topuna, güler yüzlü personele ve sahildeki kıyı tapınağının manzarasına sahiptir. Yemekler ortalama...”,
"Burası harika.Havuza bakan bir odamız var.Buggy bizi yemyeşil çimenler,çiçekler ve hindistancevizi ağaçlarının etrafında gezdirdi.Çok bakımlı bir yer. Havuz, muhtemelen tesisin en iyi kısmıdır.Plaj, güverte alanı güzel. Servis iyi. Tesisin...”,
“Radisson BLU Resort Temple Bay Mamallapuram ile İyi Deneyimlerim Var. Ekibimle bir gün boyunca oradaydım. Burayı ve Resort'a bağlı plajı çok sevdim. Lezzetli Yemek &amp;amp; Hoş Geldin İçeceği.”,
Orada tam bir aile ile birlikte 1 gün kaldım. Biz 6 oda ayırtmıştık ve odaların kalitesi o kadar iyiydi ki her aile üyesi mutluydu. İyi servis iyi yemek iyi havuz iyi personel. Genel olarak çok iyi bir konaklama”
]
}
[/kod]
Çıkarılan Veriler
JSON'da birkaç farklı alan görebilirsiniz. Daha kolay tüketmeniz için bunları size açıklayalım. Ad alanı kendini açıklayıcıdır ve onu URL, resim ve fiyat aralığı izler. URL, aslında program istediğinde verdiğiniz URL'nin aynısıdır –

Daha sonra ihtiyaç duymanız durumunda JSON'a dahildir. Resim URL'si size otelin temsili bir resmini verecek ve fiyat aralığı size standart odayı alabileceğiniz minimum fiyat ve en iyi süitlerin maksimum maliyeti hakkında bir fikir verecektir. Adres alanı, kullanım durumuna bağlı olarak yalnızca daha kolay filtreleme için birkaç alt alana bölünmüştür. Sokak, yer, bölge, posta kodu ve Ülke, tümü size sağlanır. Bunları birleştirebilir ve tek olarak kullanabilir veya posta koduna, ülkeye veya bölgeye vb. göre filtrelemek için kullanabilirsiniz.
Toplam Derecelendirme alanında, beş üzerinden derecelendirme ve oteli gerçekten inceleyen kişi sayısı bulunur. Neden ikisi de önemlidir? Bir otelin 4,9/5 yıldızla derecelendirildiğini, ancak yalnızca 10 kişinin değerlendirdiğini, diğerinin ise 4,5/5 yıldızla derecelendirildiğini, ancak 2500 kişi tarafından değerlendirildiğini varsayalım. Bir müşteri hangisini rezerve eder?
Ardından, otelin ana sayfasındaki en iyi yorumlardan oluşan yorumlar alanıyla karşılaşacaksınız. Bazı incelemelerin çok uzun olduğunu ve “…” şeklinde kısaltıldığını görebilirsiniz. Programlı olarak bu, tam incelemeyi de ortaya çıkarmak için genişletilebilir. Bunu, otel, artıları ve eksileri ile ilgili Müşterinin Sesi'ni anlamak için veri toplamak ve metin madenciliği tekniklerini çalıştırmak için kullanabilirsiniz.
JSON tüm programlama dillerinden okunabilir olduğundan ve dünya çapında kabul gören standart bir formatı takip ettiğinden, tüm bu veriler kırılabilir ve formatları değiştirilebilir ve istediğiniz gibi kullanılabilir.
Programı çalıştırdıktan sonra otelin adının da olduğu bir html dosyasının oluşturulduğunu görebilirsiniz. Az önce kazınmış html sayfasının tam bir kopyasıdır. Daha fazla analiz için kullanabilir ve ondan veri kazıma konusunda kendi elinizi deneyebilirsiniz.
Bir Web Kazıma Hizmeti Sağlayıcısı ile Ne Zaman Gitmelisiniz?
Kodlama bilgisi olmayan çoğu insan, tüm süreç hakkında hala emin olmayabilir. Bu bir öğrenme süreci olarak kullanılabilirken, düzenli aralıklarla büyük ölçekli verilere ihtiyaç duyan kuruluşlar, özel bir tarama çözümleri sağlayıcısını tercih etmelidir. Tam olarak yönetilen bir web kazıma hizmeti sağlayıcısı olan PromptCloud gibi profesyonellerle çalışmanın başlıca faydaları şunlardır:
- Tümüyle yönetilen hizmet
- Tamamen özelleştirilebilir
- Güçlü SLA ile özel destek
- Düşük gecikme süresi
- Son derece ölçeklenebilir
- Bakım
Sorumluluk Reddi: Bu eğitimde sağlanan kod yalnızca öğrenme amaçlıdır. Nasıl kullanıldığından sorumlu değiliz ve kaynak kodunun herhangi bir zararlı kullanımı için hiçbir sorumluluk kabul etmiyoruz.
