Nedir (php) bir web sitesi veri kazımak için en verimli yolu?

2 Cevap php

Im IMDB veri kazımak için çalışıyor, ancak doğal olarak sayfaları bir yeri vardır ve bir seri biçimde yapıyor yol çok uzun sürüyor. Ben multi-threaded CURL yapmak bile.

Bunu yapmanın daha hızlı bir yolu var mı?

Evet IMDb metin dosyaları sunuyor biliyorum, ama aklı başında herhangi bir şekilde her şeyi sunmuyoruz.

2 Cevap

PHP ve sıralı işleme ile kazıma kaba kuvvet bir çok yaptık iyi olacak gibi görünüyor. Sana "uzun bir süre ne" olduğundan emin değilim, ama sıyırıp ederken sık sık başka şeyler yapmak.

Genellikle hiçbir şey gerçek zamanlı, sayar kendi verilerine benim kazıma bağlıdır, ve ben genellikle bunu kazımak ve aynı zamanda masaj.

Diğer zamanlarda ben bir site aşağı çekme ve yerel olarak kaydetmek için bir kurnaz wget komutunu kullanacağız. Sonra bazı regex büyü ile bir PHP komut verileri ayıklamak var.

PHP curl_ * kullanır ve çok iyi çalışıyor.

Eğer bir ebeveyn işi olabilir ki sağlayarak çatal çocuk süreçler URL işledikleri, hangi kazımak ve (vb, fs, db) yerel verileri kaydetmek. Ebeveyn aynı URL kez değil işlenir ve çocuklar asmak yok emin sorumludur.

Linux (pcntl_, çatal, vb) yapmak kolaydır, zor pencere kutuları.

Ayrıca son değiştirilme zamanında bakmak için bazı mantık eklemek ve (hangi önceden mağaza) olup içeriği değişti ya da zaten varsa sayfasını kazıma atlayın. Yapabileceğin böyle optimizasyon hileci bir sürü muhtemelen var.

Düzgün ekleyelim curl_multi_add_handle ile cURL kullanarak ve curl_multi_select iseniz hayır çok fazla yapabileceğiniz var. Eğer sistem için işlemek için kolları optimal sayısını bulmak için test edebilirsiniz. Çok az ve çok fazla, kullanılmayan bant genişliği bırakacak ve siz kolları geçiş çok fazla zaman kaybedecektir.

Siz paralel çalışan birçok komut örnekleri var usta-işçi çoklu işlem desen kullanmayı deneyebilirsiniz, getir ve sayfaları daha sonra işlem bloğu için cURL kullanarak her biri. http://gearman.org/?id=gearman_php_extension zarif çözüm oluşturma ama Unix üzerinde proses kontrol fonksiyonlarını kullanarak ya da arka (ya da sistem kabuk aracılığıyla veya non-engelleme HTTP üzerinden) daki dosyası arayarak yardımcı olabilir gibi Altyapıları da iyi çalışabilir.