Bir Web Sitesinden Bilgi Çekmek İçin Temel Bir Web Tarayıcısı Nasıl Oluşturulur

Bir Web Sitesinden Bilgi Çekmek İçin Temel Bir Web Tarayıcısı Nasıl Oluşturulur

Web sitelerinden veya web tarayıcılarından bilgi okuyan programlar, her türlü faydalı uygulamaya sahiptir. Hisse senedi bilgileri, spor skorları, bir Twitter hesabından gelen metin için kazıyabilir veya alışveriş sitelerinden fiyatları çekebilirsiniz.





Bu web tarama programlarını yazmak, düşündüğünüzden daha kolaydır. Python, web sitelerinden bilgi alan komut dosyaları yazmak için harika bir kitaplığa sahiptir. Şimdi Scrapy kullanarak bir web tarayıcısının nasıl oluşturulacağına bakalım.





Scrapy'yi Yükleme

cıvıl cıvıl web'i sıyırmak ve web tarayıcıları oluşturmak için oluşturulmuş bir Python kitaplığıdır. Hızlıdır, basittir ve fazla çaba harcamadan birden çok web sayfasında gezinebilir.





Scrapy, Pip Installs Python (PIP) kitaplığı aracılığıyla kullanılabilir, burada bir tazeleme Windows, Mac ve Linux'ta PIP nasıl kurulur .

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



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

video oyunları oynayarak para kazanabilir misin
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

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





pip install scrapy

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

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Web Tarayıcı Nasıl Yapılır?

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





Bir tarayıcı yazmanın ilk adımı, aşağıdakilerden genişleyen bir Python sınıfı tanımlamaktır. Scrapy.Örümcek . Bu, Scrapy'deki tüm işlevlere ve özelliklere erişmenizi sağlar. Bu sınıfı arayalım örümcek1 .

Bir örümcek sınıfının birkaç parça bilgiye ihtiyacı vardır:

  • ile isim örümceği tanımlamak için
  • ile start_urls taranacak URL'lerin listesini içeren değişken (Wikipedia URL'si bu eğitimde örnek olacaktır)
  • ile ayrıştırma() bilgi çıkarmak için web sayfasını işlemek için kullanılan yöntem
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

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

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Günlüğü Kapatma

Scrapy'yi bu sınıfla ç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ı Dosyanın başına kod ekleyerek ifade.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Şimdi betiği yeniden çalıştırdığınızda, günlük bilgileri yazdırılmaz.

Chrome Denetçisini Kullanma

Bir web sayfasındaki her şey HTML öğelerinde saklanır. Öğeler, Belge Nesne Modeli'nde (DOM) düzenlenir. DOM'yi anlamak, web tarayıcınızdan en iyi şekilde yararlanmak için çok önemlidir. Bir web tarayıcısı, bilgi bulmak için bir sayfadaki tüm HTML öğelerini arar, bu nedenle bunların nasıl düzenlendiklerini bilmek önemlidir.

Google Chrome, HTML öğelerini daha hızlı bulmanıza yardımcı olan 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 İncelemek menüden

Bu adımlar, geliştirici konsolunu aşağıdakilerle birlikte açacaktır: Elementler sekmesi seçildi. Konsolun altında bir element ağacı göreceksiniz. Bu ağaç, betiğiniz için nasıl bilgi alacağınızdır.

Başlığı Çıkarma

Senaryonun bizim için biraz çalışmasını sağlayalım; Web sayfasının başlık metnini almak için basit bir tarama.

Komut dosyasına bazı kodlar ekleyerek komut dosyasını başlatın. ayrıştırma() başlığı çıkaran yöntem.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

NS cevap argüman adı verilen bir yöntemi destekler CSS() bu, sağladığınız konumu kullanarak sayfadan öğeleri seçer.

Bu örnekte, eleman h1.ilk Başlık . Ekleme

::text

komut dosyasına, size öğenin metin içeriğini veren şeydir. Son olarak, Ayıkla() yöntem, seçilen öğeyi döndürür.

Bu betiği Scrapy'de çalıştırmak, başlığı metin biçiminde yazdırır.

[u'Battery (electricity)']

Açıklamayı Bulma

Şimdi başlık metnini kazıdığımıza göre, komut dosyasıyla daha fazlasını yapalım. Tarayıcı, başlıktan sonraki ilk paragrafı bulacak ve bu bilgiyi çıkaracaktır.

İşte Chrome Geliştirici Konsolu'ndaki öğe ağacı:

diskim 100'de çalışıyor
div#mw-content-text>div>p

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

Bu konum, tüm P tüm açıklamayı içeren eşleşen öğeler. İlk almak için P eleman bu kodu yazabilirsiniz:

response.css('div#mw-content-text>div>p')[0]

Tıpkı başlık gibi, CSS çıkarıcı eklersiniz

::text

öğenin metin içeriğini almak için.

response.css('div#mw-content-text>div>p')[0].css('::text')

Son ifade kullanır Ayıkla() listeyi döndürmek için Python'u kullanabilirsiniz katılmak() tüm tarama tamamlandıktan sonra listeye katılma işlevi.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Sonuç metnin ilk paragrafıdır!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

JSON Verilerini Toplama

Scrapy, bilgileri metin biçiminde çıkarabilir, bu da yararlıdır. Scrapy ayrıca JavaScript Object Notation (JSON) verilerini görüntülemenizi sağlar. JSON, bilgileri düzenlemenin düzgün bir yoludur ve web geliştirmede yaygın olarak kullanılır. JSON, Python ile oldukça iyi çalışır ilave olarak.

JSON olarak veri toplamanız gerektiğinde, teslim olmak Scrapy'de yerleşik ifade.

İşte bir verim ifadesi kullanan betiğin yeni bir sürümü. İlk p öğesini metin biçiminde almak yerine, bu, tüm p öğelerini alacak ve onu JSON biçiminde düzenleyecektir.

kendine bir emoji yap iphone
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Artık bir çıktı JSON dosyası belirterek örümceği çalıştırabilirsiniz:

scrapy runspider spider3.py -o joe.json

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

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Birden Fazla Elemanı Kazıma

Şimdiye kadar, web tarayıcısı sayfadan başlığı ve bir tür öğeyi sıyırdı. Scrapy, tek bir komut dosyasında farklı türdeki öğelerden bilgi de çıkarabilir.

Bir hafta sonu için en iyi IMDb Box Office hitlerini çıkaralım. Bu bilgi şuradan çekilir: http://www.imdb.com/chart/boxoffice , her metrik için satır içeren bir tabloda.

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

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

NS resim seçici bunu belirtir resim soyundan geliyor td.posterColumn . Doğru özniteliği çıkarmak için |__+_| ifadesini kullanın.

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

::attr(src)

Daha Fazla Web Kazıyıcı ve Bot

Scrapy, istediğiniz her türlü web taramasını yapabilen ayrıntılı bir kitaplıktır. Python desteğiyle birlikte HTML öğelerinde bilgi bulmak söz konusu olduğunda, yenmek zor. İster bir web tarayıcısı oluşturuyor olun, ister web kazımanın temellerini öğreniyor olun, tek sınır ne kadar öğrenmeye istekli olduğunuzdur.

Tarayıcılar veya botlar oluşturmanın daha fazla yolunu arıyorsanız, deneyebilirsiniz Python kullanarak Twitter ve Instagram botları oluşturun . Python, web geliştirmede bazı harika şeyler oluşturabilir, bu nedenle bu dili keşfederken web tarayıcılarının ötesine geçmeye değer.

Paylaş Paylaş Cıvıldamak E-posta Bilmeniz Gereken 15 Windows Komut İstemi (CMD) Komutu

Komut istemi hala güçlü bir Windows aracıdır. İşte her Windows kullanıcısının bilmesi gereken en kullanışlı CMD komutları.

Sonrakini Oku
İlgili konular
  • Programlama
  • Webmaster araçları
  • Programlama
  • piton
  • Kodlama Eğitimleri
  • Web Tarayıcıları
Yazar hakkında Anthony Grant(40 Makale Yayımlandı)

Anthony Grant, Programlama ve Yazılımı kapsayan serbest çalışan bir yazardır. Programlama, Excel, yazılım ve teknoloji ile uğraşan bir Bilgisayar Bilimi uzmanıdır.

Anthony Grant'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın