İlan

Web sitelerinden veya web tarayıcılarından bilgi okuyan programların her türlü yararlı uygulaması vardır. Bir Twitter hesabından hisse senedi bilgileri, spor skorları, metinler için kazıyabilir veya alışveriş web sitelerinden fiyatlar alabilirsiniz.

Bu web tarama programlarını yazmak düşündüğünüzden daha kolaydır. Python, web sitelerinden bilgi ayıklayan komut dosyaları yazmak için harika bir kütüphaneye sahiptir. Scrapy kullanarak nasıl web tarayıcısı oluşturacağınıza bakalım.

Scrapy Kurulumu

scrapy web'i kazımak ve web tarayıcıları oluşturmak için oluşturulan bir Python kütüphanesidir. Hızlı, basit ve fazla çaba harcamadan birden fazla web sayfasında gezinebilir.

Scrapy, Pip Kurulumları Python (PIP) kütüphanesinden edinilebilir, burada bir tazeleme Windows, Mac ve Linux'a PIP nasıl kurulur Windows, Mac ve Linux'a Python PIP KurulumuBirçok Python geliştiricisi, Python'un geliştirmeyi kolaylaştırması için PIP adlı bir araca güvenir. Python PIP'in nasıl kurulacağı aşağıda açıklanmıştır. Daha fazla oku .

Python Sanal Ortamı Kullanma Scrapy'yi sistem dosyalarınızı yalnız bırakan sanal bir dizine kurmanıza izin vereceği için tercih edilir. Scrapy'nin belgeleri en iyi sonuçları almak için bunu yapmanızı önerir.

Bir dizin oluşturun ve bir sanal ortam başlatın.

mkdir tarayıcı. cd tarayıcı. sanalenv.. venv / bin / etkinleştirin. 

Artık bir PIP komutu kullanarak Scrapy'yi bu dizine kurabilirsiniz.

pip kurulum skrapesi. 

Scrapy programının doğru bir şekilde kurulduğundan emin olmak için hızlı bir kontrol

scrapy. # yazdırır. Scrapy 1.4.0 - aktif proje yok Kullanım: scrapy  [seçenekler] [argümanlar] Kullanılabilir komutlar: bench Hızlı karşılaştırma testi getirme çalıştır Scrapy indiricisini kullanarak bir URL getir genspider Önceden tanımlanmış şablonları kullanarak yeni örümcek oluşturun runspider Bağımsız bir örümcek çalıştırın ( projesi)... 

Web Tarayıcı Nasıl Oluşturulur

Artık ortam hazır olduğuna göre web tarayıcısını oluşturmaya başlayabilirsiniz. Şimdi pillerle ilgili bir Wikipedia sayfasından bazı bilgileri inceleyelim: https://en.wikipedia.org/wiki/Battery_(electricity).

Bir tarayıcı yazmanın ilk adımı, Python sınıfını tanımlamaktır. Scrapy. Örümcek. Bu, Scrapy'deki tüm işlevlere ve özelliklere erişmenizi sağlar. Bu sınıfa diyelim Spider1.

Örümcek sınıfının birkaç bilgiye ihtiyacı vardır:

  • bir isim örümceği tanımlamak için
  • bir start_urls taranacak URL'lerin listesini içeren değişken (Wikipedia URL'si bu eğiticide örnek olacaktır)
  • bir Ayrıştırma () bilgi çıkarmak için web sayfasını işlemek için kullanılan yöntem
ithal terapi sınıfı örümcek1 (terapi. Örümcek): name = 'Wikipedia' start_urls = [' https://en.wikipedia.org/wiki/Battery_(electricity)'] def ayrıştırma (benlik, yanıt): geçme. 

Her şeyin düzgün çalıştığından emin olmak için hızlı bir test.

scrapy runspider örümcek1.py. # yazdırır. 2017-11-23 09:09:21 [scrapy.utils.log] BİLGİ: Scrapy 1.4.0 başladı (bot: scrapybot) 2017-11-23 09:09:21 [scrapy.utils.log] BİLGİ: Geçersiz kılınan ayarlar: {'SPIDER_LOADER_WARN_ONLY': Doğru} 2017-11-23 09:09:21 [scrapy.middleware] BİLGİ: Etkin uzantılar: ['scrapy.extensions.memusage. MemoryUsage ',' scrapy.extensions.logstats. LogStats', ...

Günlük Kaydını Kapatma

Bu sınıfla Scrapy'yi çalıştırmak, şu anda size yardımcı olmayacak günlük bilgilerini yazdırır. Bu fazla günlük bilgisini kaldırarak basitleştirelim. Kullanın uyarı ifadesini dosyanın başına kod ekleyerek.

alma günlüğü. logging.getLogger ('scrapy'). setLevel (günlüğe kaydetme. UYARI)

Komut dosyasını tekrar çalıştırdığınızda, günlük bilgileri yazdırılmaz.

Chrome Inspector'ı kullanma

Bir web sayfasındaki her şey HTML öğelerinde saklanır. Öğeler Belge Nesne Modeli'nde (DOM) düzenlenmiştir. DOM'yi anlamak çok önemlidir JavaScript ve Web Geliştirme: Belge Nesne Modelini KullanmaBu makale size JavaScript'in birlikte çalıştığı belge iskeletini tanıtacaktır. Bu soyut belge nesnesi modeli hakkında bilgi sahibi olarak, herhangi bir web sayfasında çalışan JavaScript yazabilirsiniz. Daha fazla oku web tarayıcınızdan en iyi şekilde yararlanmak için. Bir web tarayıcısı, bilgi bulmak için bir sayfadaki tüm HTML öğelerini arar, bu nedenle bunların nasıl düzenlendiğini bilmek önemlidir.

Google Chrome, HTML öğelerini daha hızlı bulmanıza yardımcı olacak araçlara sahiptir. Denetçiyi kullanarak web sayfasında gördüğünüz herhangi bir öğenin HTML'sini bulabilirsiniz.

  • Chrome'da bir sayfaya gidin
  • Fareyi görüntülemek istediğiniz öğenin üzerine getirin
  • Sağ tıklayın ve seçin denetlemek menüden

Bu adımlar, geliştirici konsolunu Elementler sekmesi seçildi. Konsolun altında bir eleman ağacı göreceksiniz. Bu ağaç betiğiniz için nasıl bilgi alacaksınız.

Başlığı Çıkarma

Senaryoyu bizim için biraz iş yapalım; Web sayfasının başlık metnini almak için basit bir tarama.

Biraz kod ekleyerek komut dosyasını başlatın. Ayrıştırma () başlığı ayıklayan yöntem.

... def ayrıştırma (benlik, yanıt): print response.css ('h1 # firstHeading:: text'). extract ()... 

tepki argüman adlı bir yöntemi destekler CSS () sağladığınız konumu kullanarak sayfadaki öğeleri seçer.

Bu örnekte, öğe h1.firstHeading. Ekleme ::Metin size öğenin metin içeriğini veren komut dosyasıdır. Sonunda, Ayıkla() yöntemi seçili öğeyi döndürür.

Bu komut dosyasını Scrapy'de çalıştırmak başlığı metin biçiminde yazdırır.

[u'Pil (elektrik) ']

Açıklamayı Bulma

Artık başlık metnini not ettiğimize göre, senaryo ile daha fazlasını yapalım. Tarayıcı, başlıktan sonraki ilk paragrafı bulacak ve bu bilgileri çıkaracaktır.

Chrome Geliştirici Konsolu'ndaki öğe ağacı şunlardır:

div # mw-içerik-metin> div> p

Sağ ok (>), öğeler arasındaki bir ebeveyn-çocuk ilişkisini gösterir.

Bu konum, p eşleştirilen öğeler, bu açıklamanın tamamını içerir. İlkini almak için p öğesi bu kodu yazabilirsiniz:

response.css ( 'div # mw-içerik-metin> div> p') [0]

Tıpkı başlık gibi, CSS çıkarıcı da ekliyorsunuz ::Metin öğenin metin içeriğini almak için.

response.css ( 'div # mw-içerik-metin> div> p') [0] .css ( ':: text')

Son ifade şunu kullanır: Ayıkla() listeye dönmek için. Python'u kullanabilirsiniz katılmak() tüm tarama tamamlandıktan sonra listeye katılmak için işlev.

 def ayrıştırma (benlik, yanıt): yazdır '' .join (response.css ('div # mw-content-text> div> p') [0] .css (':: metin'). extract ())

Sonuç metnin ilk paragrafıdır!

Bir elektrik pili, elektrik enerjisine güç sağlamak için harici bağlantıları olan bir veya daha fazla elektrokimyasal hücreden oluşan bir cihazdır. fenerleri, akıllı telefonlar ve elektrikli arabalar gibi cihazlar. [1] Bir pil elektrik gücü verirken, pozitif terminali dır-dir... 

JSON Verilerini Toplama

Terapi, metin biçiminde bilgi çıkarabilir, bu da yararlıdır. Scrapy ayrıca verileri JavaScript Nesne Gösterimi'ni (JSON) görüntülemenizi sağlar. JSON, bilgileri düzenlemenin temiz bir yoludur ve web geliştirmede yaygın olarak kullanılmaktadır. JSON Python ile gayet güzel çalışıyor JSON Python Ayrıştırma: Basit Bir KılavuzHemen hemen her dil ve ortamdan JSON'u ayrıştırmak ve oluşturmak için kullanılabilir kitaplıklar ve araç kitleri vardır. Bu makalede JSON python ayrıştırmadan kaynaklanan yöntemler ve sorunlar üzerinde durulmaktadır. Daha fazla oku de.

JSON olarak veri toplamanız gerektiğinde, Yol ver Scrapy'de yerleşik bir ifade.

Burada, bir yayın ifadesi kullanan komut dosyasının yeni bir sürümü. İlk p öğesini metin biçiminde almak yerine, tüm p öğelerini alır ve JSON biçiminde düzenler.

... def ayrıştırma (benlik, yanıt): response.css içindeki e için ('div # mw-content-text> div> p'): verim {'para': '' .join (e.css (':: metin') ) .extract ()). şerit ()}... 

Artık bir çıkış JSON dosyası belirterek örümcek çalıştırabilirsiniz:

scrapy runspider örümcek3.py -o joe.json. 

Komut dosyası şimdi tüm p öğelerini yazdıracaktır.

[ {"para": "Bir elektrik pili, bir veya daha fazla elektrokimyasal hücreden oluşan ve harici bağlantıları olan, örneğin fenerleri, akıllı telefonlar ve elektrikli arabalar. [1] Bir pil elektrik gücü verirken, pozitif terminali katot ve negatif terminali Anot. [2] Negatif olarak işaretlenen terminal, harici bir devreye bağlandığında harici bir cihaza akacak ve enerji verecek elektron kaynağıdır. Bir pil harici bir devreye bağlandığında, elektrolitler içerisindeki iyonlar olarak hareket edebilir ve ayrı terminallerde tamamlanacak kimyasal reaksiyonlar ve böylece harici devre. Bu iyonların akünün içindeki hareketini sağlamak için akünün aküden dışarı akmasını sağlar. [3] Tarihsel olarak "pil" terimi, özellikle bununla birlikte kullanım, tek bir hücreden oluşan cihazları içerecek şekilde gelişmiştir. [4] "}, {" para ":" Birincil (tek kullanımlık veya \ "tek kullanımlık \") piller bir kez kullanılır ve atılır; deşarj sırasında elektrot malzemeleri geri döndürülemez şekilde değiştirilir. Yaygın örnekler, fenerler için kullanılan alkalin pil ve çok sayıda taşınabilir elektronik cihazdır. İkincil (şarj edilebilir) piller şarj edilebilir ve çoklu şarj edilebilir ...

Birden Fazla Eleman Kazıma

Şimdiye kadar web tarayıcısı başlık ve sayfadaki bir tür öğeyi kazıdı. Scrapy ayrıca bir komut dosyasında farklı öğe türlerinden bilgi ayıklayabilir.

Hafta sonu için en iyi IMDb Box Office isabetlerini çıkaralım. Bu bilgi şuradan alınmıştır: http://www.imdb.com/chart/boxoffice, her bir metrik için satır içeren bir tabloda.

Ayrıştırma () yöntemi satırdan birden fazla alan ayıklayabilirsiniz. Chrome Geliştirici Araçları'nı kullanarak tablonun içine yerleştirilmiş öğeleri bulabilirsiniz.

... def ayrıştırma (benlik, yanıt): response.css içindeki e için ('div # boxoffice> tablo> tbody> tr'): verim {'title': '' .join (e.css ('td.titleColumn> a:: text '). extract ()). strip (),' weekend ':' '.join (e.css (' td.ratingColumn ') [0] .css (':: metin '). extract ()). strip (), 'gross': ''. katıl (e.css ('td.ratingColumn') [1] .css ('span.seincilInfo:: text'). extract ()). strip (), 'haftalar': '' .join (e.css (' td.weeksColumn:: text '). extract ()). strip (),' image ': e.css ('td.posterColumn img:: attr (src)'). extract_first (),}... 

görüntü seçici şunu belirtir img soyundan td.posterColumn. Doğru niteliği ayıklamak için, ifadeyi kullanın :: attr (src).

Örümceği çalıştırmak JSON döndürür:

[ {"brüt": "93,8 milyon ABD doları", "hafta": "1", "hafta sonu": "93,8 milyon ABD doları", "resim": " https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTIt[email protected]._V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Justice League"}, {"brüt": "27,5 milyon ABD doları", "hafta": "1", "hafta sonu": "27,5 milyon ABD doları", "resim": " https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgt[email protected]._V1_UX45_CR0,0,45,67_AL_.jpg", "title": "Wonder"}, {"brüt": "247,3 milyon ABD doları", "hafta": "3", "hafta sonu": "21,7 milyon ABD doları", "resim": " https://images-na.ssl-images-amazon.com/images/M/[email protected]_V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Thor: Ragnarok"},... ]

Daha Fazla Web Sıyırıcı ve Botlar

Scrapy, istediğiniz herhangi bir web taramasını yapabileceğiniz ayrıntılı bir kütüphanedir. HTML öğelerinde bilgi bulmak söz konusu olduğunda, Python desteğiyle birlikte yenmek zordur. Bir web tarayıcısı oluşturuyor olun veya web kazıma temelleri hakkında bilgi edinme tek sınır ne kadar öğrenmek istediğinizdir.

Tarayıcı veya bot oluşturmanın daha fazla yolunu arıyorsanız, Python kullanarak Twitter ve Instagram botları oluşturun Python Kullanarak Twitter, Instagram ve Reddit Botları Nasıl OluşturulurKendi sosyal medya botlarınızı oluşturmak ister misiniz? Twitter, Instagram ve Reddit güncellemelerini Python kullanarak nasıl otomatik olarak yayınlayacağınız aşağıda açıklanmıştır. Daha fazla oku . Python web geliştirmede harika şeyler inşa edebilir, bu yüzden bu dili keşfederken web tarayıcılarının ötesine geçmeye değer.

Anthony Grant, Programlama ve Yazılım konularında serbest çalışan bir yazardır. Programlama, Excel, yazılım ve teknolojide büyük bir Bilgisayar Bilimleri dalgasıdır.