Stop guessing what′s working and start seeing it for yourself.
Giriş yapın veya kayıt olun
Q&A
Question Center →

Semalt'tan Bir Eğitim: Python'da Web Kazıma

Son zamanlarda KinoPoisk'i (IMDB'nin Rusça sürümü) ziyaret ettim ve yıl boyunca 1000 filmin üzerinde oynamayı başardım. Bu verileri daha ayrıntılı olarak araştırmanın ilginç olacağını düşündüm: Zamanla film tadı değişti mi? Yılın hangi mevsiminde daha fazla film seyrederim?

Güzel grafikleri analiz etmeden önce, verileri almamız gerekiyor. Maalesef pek çok hizmetin ortak API'sı yok, bu nedenle kollarınızı sarın ve html sayfalarını ayrıştırmanız gerekir.

Bu makale, her zaman Web Hurdaya Çıkarma'nın nasıl kullanılacağını öğrenmek isteyenler için hazırlanmıştır, ancak bunların üzerinde ellerini alt üst etmemiş ya da nereden başlayacaklarını bilmiyorlardı.

Görev

Görevimiz, daha önce görülen filmler hakkındaki verileri çıkarmaktır: filmin başlığı, izlenme tarihi ve saati, kullanıcının derecesi.

Aslında işimiz 2 aşamada yapılacaktır:

Aşama 1: html sayfalarını indirip sakla

Aşama 2: html dosyasını uygun bir biçimde ayrıştırmak ileri analiz (csv, json, pandas dataframe vb.)

Enstrümanlar

http-istekleri göndermek için pek çok python-library var. En ünlü ve çok kullanışlı olan İsteklerdir.

Ayrıca, html ayrıştırması için bir kitaplık seçmek gereklidir.

BeatifulSoup, lxml

Bunlar html'yi ayrıştırmak için en popüler iki kütüphanedir ve bunlardan birini seçmek kişisel bir tercihtir. Dahası, bu kütüphaneler birbirlerine yakından bağlı: BeautifulSoup, ivme için dahili bir ayrıştırıcı olarak lxml'yi kullanmaya ve lxml'de bir souparser modülü eklemeye başladı. Yaklaşımları karşılaştırmak için verileri BeautifulSoup ile ayrıştırıp, XPath seçicilerini lxml.html modülünde kullanacağım.

Veri İndiriliyor

Veri indirmeye başlayalım. Her şeyden önce, sadece sayfayı url'ye getirip yerel bir dosyaya kaydetmeyi deneyelim.

Elde edilen dosyayı açıp bunun o kadar basit olmadığını görüyoruz: site bize robot olarak baktı ve verileri göstermeyecek.

Sitenin İşlevini Öğrenelim

Tarayıcı, siteden bilgi alma konusunda herhangi bir problem yaşamıyor. İsteği tam olarak nasıl gönderdiğini görelim. Bunu yapmak için, tarayıcıdaki "Geliştirici Araçları" ndaki "Ağ" panelini kullanıyoruz (bunun için Firebug kullanıyorum), genellikle ihtiyacımız olan istek en uzun olanı.

Gördüğümüz gibi, tarayıcı ayrıca üstbilgilere UserAgent, çerez ve başka sayıda parametre gönderir. Öncelikle doğru UserAgent'ı bir başlığa göndermeye çalışacağız.

Bu kez başarılı oluyoruz, şimdi gerekli verilere sahibiz. Bazen sitenin çerezin geçerliliğini kontrol ettiğini belirtmek gerekir; bu durumda, İstekler kitaplığındaki oturumlar yardımcı olacaktır.

Tüm Fiyatlar İndir

Artık oranları bir sayfadan kaydedebiliriz. Ancak genellikle kullanıcının çok oranları vardır ve tüm sayfalar arasında yinelenmesi gerekir. Bize ilgi duyan sayfa numarası doğrudan url'ye aktarmak kolaydır.

Html'den Veri Toplama

Şimdi doğrudan html verilerinin toplanmasına geçelim. HTML sayfasının nasıl yapılandığını anlamanın en kolay yolu, tarayıcıdaki "Inspect element" işlevini kullanmaktır. Bu durumda, her şey oldukça basit: oranlarla birlikte tüm tablo etikette. Bu düğmeyi seçin: 

from bs4 import BeautifulSoup

from lxml import html

# Beautiful Soup

soup = BeautifulSoup(text)

film_list = soup.find('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring(text)

film_list_lxml = tree.xpath('//div[@class = ''profileFilmList'']')[0]

Filmin Rus başlığını nasıl çıkaracağınızı ve bir bağlantıyı öğrenelim filmin sayfasına (metnin ve özniteliğin değerinin nasıl alınacağı da).

İngilizce başlık seçmeniz gerekiyorsa "nameRus" u "nameEng" olarak değiştirmeniz yeterlidir.

Sonuçlar

Web sitelerini nasıl ayrıştıracağınızı, Kütüphaneler İstekleri, BeautifulSoup ve lxml ile tanıştığımızı ve ayrıca KinoPoisk'te daha önce görülen filmlerin daha ayrıntılı analiz edilmesi için gerekli verileri aldığımızı öğrendik.

View more on these topics

Post a comment

Post Your Comment

Skype

semaltcompany

WhatsApp

16468937756

Telegram

Semaltsupport