İçindekiler:

ESP8266/ESP32 ile Verileri Kazıma: 7 Adım
ESP8266/ESP32 ile Verileri Kazıma: 7 Adım

Video: ESP8266/ESP32 ile Verileri Kazıma: 7 Adım

Video: ESP8266/ESP32 ile Verileri Kazıma: 7 Adım
Video: Review of ELMDESK DESKA4 3500mW EleksMaker Laser Engraver - Bangood 2024, Temmuz
Anonim
ESP8266/ESP32 ile Verileri Kazıma
ESP8266/ESP32 ile Verileri Kazıma
ESP8266/ESP32 ile Verileri Kazıma
ESP8266/ESP32 ile Verileri Kazıma

Arduino projeleriniz için hiç veri almak istediniz, ancak bunun için genel bir API yok mu? Veya kurulum işleminin çok uygun olmadığı Instagram API gibi durumlarda?

Bu Eğitilebilir Tabloda, ESP8266 veya ESP32 projeleriniz için bir web sitesinden veri kazımak için 2 farklı seçeneğe bakacağız.

1. Adım: Videoyu Kontrol Edin

Image
Image

Bu talimatla aynı şeyi kapsayan bir video hazırladım, bu yüzden ilgileniyorsanız, lütfen kontrol edin!

2. Adım: Başlamadan Önce

Başlamadan önce
Başlamadan önce
Başlamadan önce
Başlamadan önce

Kazıma hakkında konuşacağım verilerin halka açık veriler olduğu ve herhangi bir kimlik doğrulama gerektirmediğine dair bir uyarı. Örneğin, örneğin tam YouTube abone sayıma yalnızca içerik oluşturucu stüdyosunda erişilebiliyor, bu nedenle cihazın onu yüklemek için kimliğimi doğrulayan bir istekte bulunması gerekir. Bu tür istekler bu videonun kapsamı dışında olacaktır. Kapsamlı olup olmadığını kontrol etmek için hızlı bir test, herhangi bir sitede otomatik olarak oturum açmayacağından, sayfayı gizli bir pencerede yüklemeye çalışmaktır.

Bu Eğitilebilir Kitapta kapsanan teknikler için tarayıcılarda bulunan bazı geliştirici araçlarını kullanmamız gerekecek. Bunları Firefox ile göstereceğim, ancak bazı Chrome'un benzer araçlara sahip olduğunu biliyorum ve eminim diğer tarayıcılarda da vardır.

3. Adım: Herkese Açık Olmayan API'ler (Spoiler: Instructables'da Bir Var!)

Bakacağımız ilk yol, genel olmayan bir API kullanmaktır. Bu her zaman mevcut olmayacak, ancak bu kesinlikle kullanmayı hedeflemeniz gereken yöntemdir. "Genel olmayan API" olarak adlandırdığım şey, temel olarak, bir sitenin, almak istediğimiz verileri getirmek için perde arkasında web sitesinde reklamı yapılmamış bir API kullanmasıdır.

Bunun tercih edilen seçenek olmasının birkaç nedeni vardır.

  1. En büyük avantajı, bir web sayfası kadar sık değişmesinin olası olmamasıdır, verileri doğrudan web sayfasının HTML'sinden sıyırırsanız, sitede her değişiklik yaptıklarında ayrıştırma bozulabilir.
  2. Normalde daha fazla veri verimlidir. Bir web sayfasını kazırken, ondan bilgi parçalarını çıkarmak için temel olarak tüm HTML sayfasını indiriyorsunuz, API'ler yalnızca veri noktalarını döndürecek, bu nedenle normalde çok daha küçük istekler olacaktır.
  3. Ayrıştırmak genellikle daha kolaydır. Normalde API'ler, verileri ayrıştırması kolay olan JSON biçiminde döndürür; bu, özellikle birden çok veri parçasını ayıklıyorsanız geçerlidir.

Öncelikle web sayfasının böyle bir kurulum kullanıp kullanmadığını öğrenmeliyiz. En büyük ipucu, sitenin değeri gerçek zamanlı olarak Kickstarter'da olduğu gibi güncelleyip güncellemediğidir, ancak olmasa bile bu kurulumu kullanabileceğine dair bir umut vardır. Instructables, gerçek zamanlı olarak yenilenmese de siteleri için bazı verileri almak için herkese açık olmayan bir API kullanır.

Sitenin bu kurulumu kullanıp kullanmadığını kontrol etmek için tarayıcınızın geliştirici moduna girin, bunu yapmanın en kolay yolunun sayfaya sağ tıklayıp “inspect element” seçeneğini seçmek olduğunu düşünüyorum.

Ardından ağ sekmesine gitmek isteyeceksiniz, bu, web sayfasının arka planda yaptığı istekleri görüntüleyecektir, bu sekmeyi açtıktan sonra sayfayı yeniden yüklemeniz gerekebileceğini unutmayın, çünkü yalnızca bundan sonra yapılan istekleri gösterecektir.

Normalde “json” türünde olanları aramak istersiniz. Burada çok fazla istek olabilir, bu yüzden türe göre sıralamak yardımcı olabilir. Bir "stats.json" uç noktasına sürekli istekte bulunulduğunu görebileceğiniz gibi, bu kurulumu kullandığını kickstarter kampanya sayfasında çok açık bir şekilde görebilirsiniz. Instructables yazarları sayfasında (örneğin benimki "https://www.instructables.com/member/witnessmenow/"), sürekli istekte bulunmazlar, ancak diğerleri arasında "showAuthorStats" uç noktasına bir istek gizli görebilirsiniz.

Bu istek hakkında daha fazla bilgi edinmek için üzerine tıklayabilirsiniz. İsteği çoğaltmak için ihtiyacınız olan tüm bilgileri buradan alabilmeniz gerekir. Ancak bunu yapmadan önce, istediğiniz verilere sahip olup olmadığını iki kez kontrol etmek istersiniz. Yanıt sekmesine tıklayın ve verilerin orada olup olmadığına bakın.

İhtiyacınız olan verileri içeriyorsa, hazırsınız! Daha sonra, API'lere bağlanmayla ilgili önceki videomda tartışılan aynı yaklaşımları kullanabilirsiniz. Bunun kısa versiyonu, isteğin önce Postman gibi bir araçta beklendiği gibi çalıştığından emin olmak ve ardından cihazınızda çalıştığını test etmek için bu örnek projeyi kullanmaktır.

JSON verilerini ayrıştırmak için çoğu senaryoda ArudinoJSON kullanmanızı tavsiye ederim, eğer bu hakkında talimat almak istediğiniz bir şeyse, bana bildirin!

Adım 4: Verileri Doğrudan Kazıma

Verileri Doğrudan Kazıma
Verileri Doğrudan Kazıma
Verileri Doğrudan Kazıma
Verileri Doğrudan Kazıma
Verileri Doğrudan Kazıma
Verileri Doğrudan Kazıma

Daha sonra, verileri doğrudan web sayfasından kazımaya bakacağız, bu, cihazdaki tam web sayfasını istemek ve istediğimiz verileri ayrıştırmaktır. Herkese açık olmayan API'nin bu yönteme göre avantajlarından daha önce bahsetmiştim, ancak bazen ihtiyaç duyulur!

Burada dikkat edilmesi gereken önemli bir nokta, web geliştirme konusunda bilginiz varsa, belirli bir öğe ve nasıl yapılandırıldığı hakkında bilgi edinmek için öğeyi inceleme özelliğini kullanmaya alışmış olabilirsiniz. Bu yaklaşım için bundan kaçınılmalıdır, çünkü modern web sayfaları genellikle cihazınızda olmayacak olan Javascript kullanılarak dinamik olarak değiştirilir. Cihazınızda bulunan HTML kodu yalnızca indirilen orijinal web sayfası olacaktır. Buna güzel bir örnek TeamTrees sayfasıdır, mevcut bağış sayısı 0 olarak başlar ve daha sonra bu animasyonla sayfaya yüklenir, ancak daha önce gördüğümüz iki örnekten farklı olarak arka planda verileri yüklemez, bu nedenle doğru veriler başka bir yerde olmalıdır.

Orijinal web sayfası kodunu görüntülemek için sayfaya sağ tıklayıp “Kaynağı Görüntüle”yi seçebilirsiniz. Ardından, istediğiniz belirli verileri aramak istiyorsunuz, bu nedenle TeamTrees örneğinde mevcut bağış sayısını aradığımızda, gerçek sayımın count öğesinin data-count özelliğinde saklandığını görebiliriz, burada yapmamız gereken yer burasıdır. gelen verileri kazıyın.

Sizi verilerinize yönlendiren bir arama dizisi bulmanız gerekiyor, bunu cihaz için kodlamadan önce bulmak çok daha kolay. Bu örnek için, “data-count\”” araması beni tam istediğimiz verilere getiriyor, bu da mükemmel. Sayfanın diğer yerleriyle de eşleşeceğinden endişelenmemize gerek yok, çünkü ilk önce en üstte yer alacak. Üçüncüye vurmanız gerekiyorsa, vurduğunuz ilk 2'yi yok sayacak şekilde programlayabilirsiniz.

TeamTrees örneğine bir göz atarsak, daha önce olduğu gibi yanıt başlıklarını atladık ve şimdi yanıtın gövdesine (web sayfası olan) bakıyoruz. İstemciden geri gelen, bir veri akışıdır. Arama sorgumuza kadar hiçbir şey umurumuzda değil, bu yüzden bir client.find yapıyoruz. Arama sorgusunu bulursa, true değerini döndürür ve akışı sorgunun sonuna taşır. Akıştan elde edilebilecek bir sonraki şey, aradığımız veriler olacaktır, ancak bu durumda verilerin ne kadar süreceğinden emin değiliz, ancak akıştaki mevcut yerimiz ile bir sonraki ters virgül arasındaki tüm bilgiler olduğunu biliyoruz.. Bunu “client.readBytesUntil” kullanarak yapabiliriz, bu dediğini yapar, belirtilen sorguya ulaşana kadar baytları bir arabellekte okur. Sadece okuduğunuz ara belleğin tüm verileri tutacak kadar büyük olduğundan emin olun, bence burada 32 ile oldukça güvendeyiz!

İhtiyacınız olan tüm verilere sahipseniz, artık veri okumanıza gerek yoktur. Bağlantıyı burada kapatmadım çünkü ESP8266'da bir soruna yol açmadı, ESP32'de sorun yaratıyor gibi görünüyordu, bu yüzden bir client.stop() ekledim. Dürüst olmak gerekirse, neden yöntemin en üstüne koyduğumdan emin değilim, istediğiniz verilere sahip olduğunuzda kapatmanın daha mantıklı olacağını düşünüyorum.

Adım 5: Bir Harici Sunucu Kullanarak Verileri Kazıma:

Harici Sunucu Kullanarak Verileri Kazıma
Harici Sunucu Kullanarak Verileri Kazıma
Harici Sunucu Kullanarak Verileri Kazıma
Harici Sunucu Kullanarak Verileri Kazıma

Dokunulacak başka bir konu, NodeJS gibi normal bilgisayar tabanlı ortamlarda ayrıştırma için mikro denetleyiciden çok daha iyi araçlar vardır, bu nedenle bazen verileri bir web sayfasından alan ve daha basit bir hizmet sağlayan bir hizmet yapmak mantıklı olabilir. ESP8266 veya ESP32'niz için uç nokta. Bunun bir örneği, kaç TinyPICO satıldığının canlı bir sayımını almak için CrowdSupply sayfasını kazımaktı. Bunu doğrudan bir ESP8266 veya ESP32'de elde etmek mümkün olabilirdi, ancak birkaç farklı öğe üzerinde birden fazla farklı veri noktasını ayrıştırdığı için karmaşık olurdu.

Sonunda bir NodeJS projesi oluşturdum ve Cheerio adlı bir kitaplık kullanarak verileri ayrıştırdım ve çok iyi sonuç verdi. Bu projeyi zaten sahip olduğum bulut sunucusunda barındırdım, ancak böyle bir kurulumunuz yoksa bu tür bir projeyi bir pi üzerinde çalıştırabilirsiniz.

6. Adım: Kullanım Sınırları

Kullanım Sınırları
Kullanım Sınırları

Tüm bu yaklaşımları potansiyel olarak etkileyebilecek bir şey, sitelerin kullanım sınırlarına ulaşmaktır. Normal API'lerde, normalde dakikada veya günde kaç istekte bulunabileceğiniz oldukça iyi belgelenmiştir ve proje isteklerinizi buna göre sınırlayabilirsiniz. Kazı yaparken, bu sınırların ne olduğunu bilmiyorsunuz, bu yüzden onlara çarpma ve potansiyel olarak engellenme riskiyle karşı karşıyasınız. İyi kitaplarında kalmanız için sınırlama konusunda kesin bir tavsiyede bulunamam, ancak her birkaç saniyede bir istekte bulundukları için kickstarter gibi durumlar dışında, her dakikanın altındaki herhangi bir şeyin çok sık olacağını düşünürdüm.

Adım 7: Okuduğunuz için teşekkürler

ESP8266 veya ESP32'nizdeki web sayfalarından doğrudan veri ayrıştırmakla ilgileniyorsanız, umarım bu video yardımcı olmuştur. Konuyla ilgili ele almadığım başka sorunuz var mı? Lütfen aşağıdaki yorumlarda bana bildirin veya bu konuyu veya sahip olduğunuz başka herhangi bir yapımcıyı tartışabileceğimiz Discord sunucumda bana ve diğer bir grup yapımcıya katılın, insanlar orada gerçekten yardımcı oluyor, bu yüzden takılmak için harika bir yer dışarı

Ayrıca yaptıklarımı destekleyen Github Sponsorlarıma da çok teşekkür etmek istiyorum, gerçekten minnettarım. Bilmiyorsanız, Github ilk yıl için sponsorlukları eşleştiriyor, yani bir sponsorluk yaparsanız önümüzdeki birkaç ay boyunca %100 eşleştirecekler.

Okuduğunuz için teşekkürler!

Önerilen: