İyi metin çevirisi BeautifulSoup ve Selenium ile web kazıma

Açık kaynaklı Çin OSC manşetlerine dikkat edin ve en son teknik bilgileri alın

Katılımcı çeviri (3 kişi): ZICK_ZEON, xiaoaiwhc1, Biancheng

genel bakış

HTML neredeyse düz ileridir. CSS büyük bir ilerlemedir, sayfanın yapısını ve görünümünü açıkça farklılaştırır. JavaScript biraz çekicilik katıyor. Teorik olarak öyle. Gerçek dünya hala biraz farklı.

Bu öğreticide, tarayıcıda gördüğünüzün gerçekte nasıl oluşturulduğunu ve gerekirse nasıl alacağınızı öğreneceksiniz. Özellikle Disqus yorumlarını nasıl sayacağınızı öğreneceksiniz. Araçlarımız Python ve request, BeautifulSoup ve Selenium gibi dil için harika paketlerdir.

Web kazıma ne zaman kullanılmalıdır?

Web kazıma, insan kullanıcı etkileşimini sağlamak için tasarlanmış web sayfalarının içeriğini otomatik olarak alma, bunları ayrıştırma ve bazı bilgileri (belki de diğer sayfalara gitmek için bir bağlantı) çıkarma uygulamasıdır. Gerekli web sayfası bilgilerini çıkarmanın başka bir yolu yoksa, web tarama gerekli ve etkili bir teknik yöntemdir. İdeal olarak, uygulamalar web sayfalarından programlı olarak veri elde etmek için iyi özelleştirilmiş API'ler sağlamaya dayanır. Ancak, web kazıma tekniklerini kullanmamanın daha iyi olabileceği birkaç senaryo vardır:

  • Taranan web sayfaları savunmasızdır (taradığınız web sayfası sık sık değiştirilebilir).
  • Tarama yasaktır (bazı web uygulamalarının taramayı yasaklayan politikaları vardır).
  • Tarama hızı yavaş olabilir ve tarama içeriği çok karmaşıktır (istediğiniz şey için çok fazla işe yaramaz bilgi bulmanız ve bunlarla uğraşmanız gerekiyorsa).

Gerçek web sayfaları hakkında bilgi edinin

Bazı yaygın web uygulama kodlarının uygulanmasına bakarak karşılaştığımız sorunu anlayalım. Örneğin, "Vagrant Teknolojisine Giriş" yazısı için sayfanın alt kısmında bazı Disqus yorumları var:

Bu yorumları tarayabilmemiz için önce onları sayfada bulmamız gerekiyor.

Sayfa kodunu görüntüle

1990'lardan beri her tarayıcı, geçerli sayfanın HTML kodunu görüntülemeyi destekler. Aşağıda, kaynak görünümünde görüntülenen ve makalenin içeriğiyle ilgisi olmayan çok sayıda küçültülmüş ve çirkin JavaScript koduyla başlayan "Vagrant Teknolojisine Giriş" gönderisinin kaynak kodu içeriğinin bir parçası bulunmaktadır. İşte bunun "küçük" bir parçası:

İşte sayfadan bazı gerçek HTML kodları:

Kod dağınık görünüyor ve sayfanın kaynak kodunda Disqus yorumlarını bulamamanıza biraz şaşırıyorsunuz.

güçlü iframe

Sayfanın bir "karma" olduğu ortaya çıktı, Disqus yorumları iframe (satır içi çerçeve) öğelerine gömülü. Yorumlar alanına sağ tıklayarak bulabilirsin ve orada çerçeve bilgisini ve kaynak kodunu göreceksin:

Mantıklı. Üçüncü taraf içeriğini iframe'lere gömmek, iframe'lerin ana kullanım örneklerinden biridir. Ana sayfa kaynağında iframe etiketini bulalım. Bitti! Ana sayfa kaynağında iframe etiketi yok.

JavaScript Tarafından Oluşturulan etiket

Bu ihmalin nedeni, görüntüleme sayfası kaynağının sunucudan alınan içeriği göstermesidir. Ancak, tarayıcı tarafından oluşturulan son DOM (Belge Nesne Modeli) çok farklı olabilir. JavaScript çalışmaya başlar ve istediği zaman DOM'yi değiştirebilir. iframe bulunamıyor çünkü sayfa sunucudan alındığında mevcut değil.

Statik kazıma ve dinamik kazıma

Statik kazıma JavaScript'i yok sayar, web sayfasının kodunu tarayıcıya güvenmeden doğrudan sunucudan alır.Bu "kaynağı görüntüleyerek" gördüğünüz şeydir ve daha sonra bilgi çıkarma işlemi yapabilirsiniz.İçerik arıyorsanız kaynak kodda zaten var, bu nedenle başka bir işlem yapmanız gerekmez.Ancak, aradığınız içerik yukarıdaki Disqus yorumu gibi bir iframe içine gömülüyse, içeriği getirmek için dinamik kazıma kullanmanız gerekir.

Dinamik tarama, dinamik içerik işlemeyi ve yüklemeyi tamamlamak için önce sayfada JavaScript'i çalıştıran gerçek bir tarayıcı (veya arayüz olmayan bir tarayıcı) kullanır.Daha sonra DOM'yi sorgulayarak aradığı içeriği elde eder.Bazen, Ayrıca, ihtiyacınız olan içeriği elde etmek için tarayıcının insan eylemlerini otomatik olarak simüle etmesine izin vermeniz gerekir.

İstekler ve BeautifulSoup ile statik kazıma

Statik kazıma için iki klasik Python paketinin nasıl kullanılacağına bir göz atalım: web içeriğini kazıma istekleri.HTML ayrıştırma için BeautifulSoup.

Yükleme İstekleri ve BeautifulSoup

Önce pipenv'i kurun, ardından şu komutu çalıştırın: pipenv install request beautysoup4

Önce sizin için sanal bir ortam oluşturur ve ardından iki paketi sanal ortama kurar.Kodunuz gitlab üzerinde ise pipenv install komutunu kullanarak kurulumu gerçekleştirebilirsiniz.

Web içeriği alın

Web içeriğini isteklerle getirmek için yalnızca bir kod satırı gerekir: r = request.get(url).

Kod, bir dizi faydalı özellik içeren bir yanıt nesnesi döndürür.En önemli özellikler tamam ve içeriktir.İstek başarısız olursa, r.ok False olur ve r.content hata mesajını içerir.content bir bayt akışını temsil eder, çünkü metin İşlerken, kodunu utf-8 olarak çözseniz iyi olur.

Kod hatasız bir şekilde normal olarak dönerse, r.content istenen web sayfası kaynak kodunu (yani, "kaynak kodunu görüntüle" tarafından görülen içerik) içerecektir.

BeautifulSoup ile öğeleri bulun

Aşağıdaki get_page() işlevi, verilen URL için web sayfası kaynağını alacak, ardından utf-8'e kodunu çözecek ve son olarak içeriği BeautifulSoup nesnesine iletecek ve ayrıştırma için bir HTML ayrıştırıcısı kullanan onu döndürecektir.

BeautifulSoup nesnesini aldıktan sonra gerekli bilgileri ayrıştırmaya başlayabiliriz.

BeautifulSoup, bir web sayfasındaki öğeleri bulmak için birçok arama yöntemi sağlar ve iç içe öğelerin derinliklerine inebilir.

Tuts+ web sitesinde çok sayıda eğitim öğreticisi var, işte ana sayfam.Her sayfa 12'ye kadar öğretici içerir, eğer 12 eğitim aldıysanız bir sonraki sayfaya gidebilirsiniz.Her makale < makale > etiketlerle çevrili Aşağıdaki işlev, sayfadaki tüm makale öğelerini bulur, ardından ilgili bağlantıyı bulur ve son olarak öğreticinin URL'sini çıkarır.

Selenium ile dinamik tarama

Statik kazıma, bir dizi makale için harikadır, ancak daha önce gördüğümüz gibi, Disqus yorumları JavaScript tarafından bir iframe içinde yazılır. Bu yorumları almak için tarayıcının DOM ile otomatik olarak etkileşime girmesine izin vermemiz gerekiyor. Bu tür şeyleri yapmak için en iyi araçlardan biri Selenium'dur.

Selenium öncelikle web uygulaması otomasyon testi için kullanılır, ancak aynı zamanda iyi bir genel amaçlı tarayıcı otomasyon aracıdır.

Selenyum yükleyin

Selenium'u şu komutla kurun: pipenv install Selenium

Web sürücünüzü seçin

Selenium bir web sürücüsü (otomasyon için bir tarayıcı) gerektirir. Web taraması için genellikle hangi sürücünün kullanıldığına dikkat etmek gerekli değildir. Chrome sürücüsünü kullanmanızı öneririm. Selenium kılavuzunda ilgili bir giriş var.

Chrome ve PhantomJS'yi Karşılaştırma

Bazı durumlarda başsız bir tarayıcı kullanmak isteyebilirsiniz. Teoride, PhantomJS tam olarak bu web sürücüsüdür. Ancak aslında yalnızca PhantomJS'de görünen ve Selenium Chrome veya Firefox kullandığında görünmeyen bildirilen bazı sorunlar var. Bu değişkeni denklemden çıkarmayı ve gerçek web tarayıcı sürücüsünü kullanmayı seviyorum.

Disqus yorumlarının sayısını sayın

Biraz dinamik kazıma yapalım ve Tuts+ telefonundaki Disqus yorumlarını saymak için Selenium kullanalım. Aşağıdaki içeriğin içe aktarılması gerekiyor.

get_comment_count() işlevinin Selenium sürücüsüne ve URL'ye parametre olarak geçmesi gerekir. İçeriği URL'den almak için sürücünün get() yöntemini kullanır. Bu, DOM'nin gerçek zamanlı işlenmesini yönetmek için bir sürücü nesnesinin kullanılması dışında, request.get() işlevine benzer.

Ardından, öğreticinin başlığını alır ve iframe'in yerini belirlemek için iframe'in üst kimliği, disqus_thread ve iframe etiketini kullanır:

Ardından iframe içeriğini alın. Yorumlar dinamik olarak yüklendiğinden ve mutlaka mevcut olmadığından yorum sayısı öğesi görünene kadar beklediğimizi unutmayın.

Son kısım ise benimkiler hariç en son gelen yorumları döndürmek tabii ki henüz cevap vermediğim yorumları kontrol ederek.

sonuç olarak

Web kazıma, özellikle işlemeniz gereken bilgiler yararlı API desteği sağlamadığında çok kullanışlı bir tekniktir.Modern web uygulamalarından bilgi çıkarmak için genellikle biraz beceri gerekir, ancak istekler, BeautifulSoup, Selenyum işinizi kolaylaştıracak ve verimliliği artıracaktır.

Son olarak, yazdığım, Envato Market'te bulunan bazı araçları deneyebilirsiniz, sorularınızı ve geri bildirimlerinizi bekliyoruz.

Açık kaynak topluluğu OSC "Haowen Çeviri" sütunu, kullanıcılara her gün İnternet'teki yüksek kaliteli makaleleri önermeyi ve tercüme etmeyi amaçlar. Artık, zayıf İngilizce nedeniyle birçok teknik makaleden engellenmekten korkmanıza gerek yok. odaklan Açık kaynak topluluğu OSC , her gün iyi çevrilmiş metin önerileri almak için " daha fazlasını anla , orijinal makaleyi okuyun.

Günlük Blog MySQL Genel Sorgu Günlüğü ve Yavaş Sorgu Günlüğü Analizi
önceki
Pilotları işe alırken hiçbir yara izine izin verilmez Yaralı pilot gökyüzüne uçmaya devam edebilir mi?
Sonraki
Çukurda Apple kablosuz kulaklık airpods deneyimi: yenilmez rahatlık, tek kelime "harika"!
Iwei Yumurtalı Rulo Bileklik Değerlendirme: Tüm işlevler yeterince şık, akıllı bileklik maliyet performansı için ilk tercihtir
Airmaster A380, Avrupalıların gururudur 15 yıldan az bir süre sonra neden iflas ilan etti?
İspanyol Binasını 100 milyonu aşkın kayıpla satmak Wang Jianlin'in denizaşırı "küçük hedefi" hayal kırıklığına uğramış.
Araçların İnterneti sektörünün dönüşümünü hızlandıran beş unsur ve tarihi fırsatlar ortaya çıktı
Açık kaynak yazarlar JD'nin ağır projelerinin intihalini kınadılar
"Hayal kırıklığına uğramış" Dianrong.com'dan sonra, kurucu Guo Yuhang'ın yeni başkent haritası
En iyi Snapdragon 845+ kablosuz şarj Xiaomi MIX 2S cep telefonu resmi olarak piyasaya sürüldü
Günlük blog | Dubbo'nun entegrasyonunu ve kullanımını anlamak için bir makale
2018 Küresel Otomotiv AI Konferansı düzenlendi Tencent, yapay zekayı otomotiv endüstrisi ile entegre etmenin yollarını bulmak için akıllıca bir araya geldi
Tarihteki en güçlü Xiaomi amiral gemisi ürünü! Xiaomi MIX 2S ilk değerlendirme
169 yuan! Xiao Ai Speaker Mini resmi olarak piyasaya sürüldü: yapay zeka + ağ hoparlörleri + 200 işlev
To Top