Hepsiburada Mobil Uygulama Yorumlarının Analizi(Web Scraping)- 1

Mesut Beysülen
hepsiburadatech
Published in
5 min readApr 8, 2021

Dikkat! Bu yazı serisi farklı konular üzerinde hızlı geçiş içerir…

Web üzerinde ulaşabileceğimiz bir çok veri bulunmaktadır. Bu veriler çok değerli sonuçlar elde etmemiz için önemlidir. Bizler de bu blog yazısında mobil uygulamalar üzerinde değerli bir veriyi, web scarping kütüphaneleri ile nasıl alıp, bir servis üzerinden sürekli güncel ve kullanılabilir hale getireceğimizden bahsedeceğiz.

Peki Nedir Bu Değerli Verilerimiz?

Google Play ve Apple Store üzerinde milyonlarca uygulama bulunmaktadır. Bu uygulamalar da olumlu olumsuz her anlamda faydalı olabilecek yorumlara sahiptir. İşte bizim de web üzerinden kazıma yapacağımız ve sonrasında bunu makine öğrenmesinde kullancağımız verimiz ios - android uygulama yorumları.

Birçok uygulamanın yorumuna bu şekilde ulaşılabilir ancak biz sadece spesifik anlamda kullanmak istediğimiz hepsiburada yorumlarını kazıyacağız.

Evet, android uygulamamız için google play store da bugün itibari ile yaklaşık 180 bin müşteri yorumu 400 bin rating mevcut. Kargo ve ürün memnuniyet durumundan tutun bug yorumlarına ve birçok yeni öneriye kadar faydalı yorumlar var. Bu yorumlar elbette evrene gönderilen yorumlar değil. Mobil ekibin, müşteri hizmetlerinin, listeleme ekiplerinin, tasarım ekiplerinin ve hatta hepsiburada yöneticilerinin işine yarayacak organik yorumları Hepsiburada ailesi olarak yok saymıyoruz. Biz de bu yorumları geçmişten şu an bu yazıyı okuduğunuz ana kadar store’ dan çekmeye devam ediyoruz. Eeee bu kadar veriyi aldık da öyle ham kullanacak halimiz yoktu. Bu verileri işlemek işlenen verilerden de bir şeyler yaratmak gerekiyordu. Bizde aldığımız bu veriler üzerinde duygu analizi yaptık. Yaptığımız duygu analizinde verinin iyi yorum mu yoksa kötü(memnuniyetsizlik belirten) bir yorum mu olduğunu derin öğrenme yöntemleri ile anlamaya çalıştık. Ve gayet de başarılı sonuçlar elde ettik.

Duygu Analizi Nedir?

Duygu Analizi veya diğer bir adı ile ‘Fikir Madenciliği’(Opinion Mining) tam anlamıyla birlikte; bir yazarın veya bir yazının belirli bir konuya yönelik tutumunun olumlu(positive),olumsuz(negative),tarafsız(neutral) olarak değerlendirilmesi için bir metin parçasıyla belirtilen görüşleri/ifadeleri çeşitli algoritmalar aracılığı ile hesaplayıp tanımlama ve sınıflandırma süreçlerine verilen genel bir tanımdır. Bknz.

Peki, bu anlattığım yere kadar olan kısımlardan ilkini yani yorum verisini python ve Nodejs kütüphanesini kullanarak nasıl çektiğimi ve çektiğim bu veriyi ayrıştırarak bir csv ye nasıl yazdırdığımı anlatacağım.(Bu arada bu verileri alabileceğimiz bir google api var ama ben sadece dataya hızlı ulaşmak ve istediğim gibi yönetebilmek açısından kendim için open source bir kütüphane kullandım.)

Hadi başlayalım.

Öncelikle yukarıda python ve nodejs kütüphanesi kullandığımı söylemiştim. İşte bu kütüphanelerimiz Daniel Liu abimiz tarafından yazılmış, google play yorumlarını ve bir çok gerekli yorum bilgisine ulaşabildiğimiz json döndüren kütüphane olduğunu belirtmek isterim. Birçok parametresi ile istediğimiz bilgiye göre filtre uygulayabiliyoruz. Çok muhteşem bilgilere sahip olmadan sadece temel python ve nodejs bilgisi ile kullanılacak kütüphaneler play-scraper ve google-play-scraper, gerçekten benim işimi fazlası ile gördü.

Yukarıda bulunan linklerden bu kütüphanelerin dökümantasyonuna ulaşabilirsiniz. Dökümantasyon olarak da gayet açıklayıcılar ancak ben sizlere buradan Türkçe halini anlatıyor olacağım.

İlk olarak eğer bir IDE üzerinde çalışmıyorsanız (örneğin VS Code ya da Pycharm gibi)yapmanız gereken aşağıdaki komutu çalıştırarak kütüphaneyi localinize indirmelisiniz.

npm install google-play-scraper     --> Nodejs için
pip install play-scraper --> python için

Ben sizlere bu projeyi, VS Code üzerinden Nodejs için anlatacağım ancak sizler Pycharm da python flask ile bir API oluşturabilirsiniz. Şimdi bir Nodejs projesi başlatalım.

NODEJS PROJE OLUŞTURMA

  1. reviewsProjectAPI adında bir dosya oluşturulur. VS Code üzerinden terminal açılır. Terminale mkdir reviewsProjectAPI yazılır.
  2. Yeni yarattığımız bu dosyanın root’ una gidilir. Terminale cd reviewsProjectAPI yazılır.
  3. package.json dosyası yaratılır. Terminale npm init yazılır.

Package.json, npm’e gerekli bilgileri veren, projenin tanımlamasına ve projenin bağımlılıklarını yönetmesine izin veren bir dosyadır. npm init, sırası ile uygulama adı, açıklama, sürüm, yazar, anahtar kelime gibi bazı bilgileri girmenizi ve sonunda girilen bilgileri onaylayıp onaylamayacağınızı soracaktır.

json dosyası son hali şu şekilde olamalıdır.

Dosya yapımız aşağıdaki gibi olmalıdır.

server.js adında bir dosya oluşturuyoruz. Bu dosyamıza apimizin protokol ve logiclerini yazacağız.

SUNUCU ve SCRAPER KURULUMU

Express ve nodmon kuralım. Expres, sunucu oluşturmak için kullanılırken nodmon, değişen dosyaları izleyerek uygulamamızdaki değişiklikleri takip etmemize ve sunucuyu otomatik olarak yeniden başlatmamıza yardımcı olacaktır.

npm install --save-dev nodemon

npm install express --save

Google Play mağazasından uygulama verilerini almak için google-play-scraper Nodejs modülünü kurmalıyız. Terminale bu komutları yazarak projeye import ediyoruz.

npm install google-play-scraper

Şimdi size API içinde ki GET isteğimizin sonuçları nasıl getireceğinden bahsedeyim. Bu scraper kütüphanesine ait bir kod bloğumuz var aşağıdaki gibi.

var gplay = require('google-play-scraper');// 3000 YORUMU TEK istekte getirir.
//nextpagination yok
gplay.reviews({appId: 'com.app.myApp',sort: gplay.sort.RATING,num: 3000}).then(console.log, console.log);// Burada ilk sayfada 150 yorumu getirir // null bir pagination parametresi gönderir// response da nextpagination parametresi sonraki sayfaların olup-olmadığını söyleyecektir.gplay.reviews({appId: 'com.app.myApp',sort: gplay.sort.RATING,paginate: true,nextPaginationToken: null}).then(console.log, console.log);// 150 istek ile pagination edilir.// her sayfada pagination token döner. son sayfa için null dır.gplay.reviews({appId: 'com.app.myApp',sort: gplay.sort.RATING,paginate: true,nextPaginationToken: 'TOKEN_FROM_THE_PREVIOUS_REQUEST' }).then(console.log, console.log);

Burada store da ki, appId’ sini verdiğimiz uygulamamızın belli sıralama seçenekleri ve belli bir limit ile, ve ince bir detay olarak düşünülmüş olan pagination token ı getirerek GET isteğimizin içine gömüyoruz. Kullandığım kod yapısını ve istek parametrelerini aşağıdaki gibi kullanabilirsiniz.

Kod bloğunda appId kısmını, uygulamanızın google play de ki package adına göre güncellemeyi unutmayın!

Evet artık terminale npm start yazarak API’ınızı localinizde çalıştırabilirsiniz. Ve göreceksiniz ki artık uygulama yorumlarınız bu API istekleriniz ile muhteşem bir şekilde localinize gelmekte. API isteğiniz aşağıdaki gibi olmalıdır.

http://localhost:3000/reviewList?limit=150&sorting=newest&nextPaginationToken=default

{
"id":
"gp:AOqpTOEaPz2MZVKLfvL31OmI3xHk6MNrEmaj6OdOhB8zt9_TPuh2ueYRjr6MXR0jR-waiU2hichG_nz0QeIy5Mk",
"userName":"Muhammet Emin Hut","userImage":"https://play-lh.googleusercontent.com/-mOdTGvL5UNw/AAAAAAAAAAI/AAAAAAAAAAA/AMZuucnEA3BdmCxa2fyqwKm6CgqURrbyQQ/photo.jpg","date": "2021-04-06T10:59:41.740Z","score": 5,"scoreText": "5","url": "https://play.google.com/store/apps/details?id=com.pozitron.hepsiburada&reviewId=gp:AOqpTOEaPz2MZVKLfvL31OmI3xHk6MNrEmaj6OdOhB8zt9_TPuh2ueYRjr6MXR0jR-waiU2hichG_nz0QeIy5Mk","title": null,"text": "uygulama gayet başarılı. çok kullanışlı. ürün aramaların da detaylar ve alt başlıklar çok iyi.","replyDate": "2021-04-06T11:45:38.420Z","replyText": "Bizi tercih ettiğiniz için teşekkür ederiz.","version": "4.7.7","thumbsUp": 0,"criterias": []}

Heroku link: https://reviewsapiprod.herokuapp.com/api/v1/androidreviewlist?limit=100&sorting=newest&packageName=com.pozitron.hepsiburada&nextPaginationToken=default

Sonuç

Bu adıma kadar her şey istenildiği gibi. Artık elimizde uygulamamıza ait yorumları alabildiğimiz bir API var. Şimdi de sıra, bu yorumların istediğimiz kadarını bir csv dosyasına aktarabileceğimiz python kodunu yazmakta. Bu API’ ya istek atıp, dönen istekleri CSV ye belli formatta yazalım.

Geri bildirim 📬

Tavsiye, eleştiri ve geri bildirimleriniz için iletişime geçebilirsiniz.

--

--

Mesut Beysülen
hepsiburadatech

Senior QA-Test Automation Engineer @MigrosOne, Ex @hepsiburada | Instructor on Youtube @mesutbeysulen