Python ile backlink bulucu: kırk satırda bir keşif listesi
Rakiplerinize link veren ancak size link vermeyen alan adlarını bulun, tek bir çağrıyla puanlayın ve CSV dosyasını sıralayın. Aşağıda varsayımsal sayılarla bir uygulama örneği bulunmaktadır.
Linkzoid editoryal ekibi ·
Koddan önceki mantık
İş için üç çağrı yeterlidir. intersect iki ila on alan adı alır ve bunların birkaçına link verenleri döndürür. refdomains kendi siteniz için link veren alan adlarını verir (çıkarmak için kullanılacak küme). bulk_dr ise kalanları puanlar.
Bir çalıştırma başına maliyet çok düşüktür ve aritmetik işlem bir kez yapılmaya değer. Kesişim için iki kredi, kendi listeniz için iki kredi, 2.000 alan adına kadar puanlama için bir kredi. Beş kredi 0,0005 $'a mal olur.
Sıra önemlidir. Puanlamadan önce çıkarma yapın.
İnsanlar genellikle her şeyi önce puanlar ve sonra filtreler. Bu ters mantıktır. Puanlamanın maliyeti düşüktür ancak CSV dosyasında elli bin satır olduğunda çok zaman harcar. Önce listeyi örtüşme ile küçültün, hayatta kalanlar için DR isteyin ve tüm süreci bir düz sözlükte tutun ki ikinci bir çalıştırmada dününkü sonucu yeniden kullanabilesiniz.
prospects.py
RIVALS içindeki alan adları yer tutucudur. Alan adları .get ile okunduğu için, bir sütuna güvenmeden önce kendi çalıştırmanızdan ham bir satır kontrol edin.
python
import csv, json, os, urllib.request as u, urllib.parse as p
KEY = os.environ['LZ_KEY']
ME = 'mysite.example'
RIVALS = ['rival-a.example', 'rival-b.example', 'rival-c.example']
def get(**kw):
q = p.urlencode(kw)
with u.urlopen(f'https://linkzoid.pro/api.php?{q}&key={KEY}', timeout=30) as r:
d = json.load(r)
if not d['ok']:
raise SystemExit(d)
return d
gap = get(action='intersect', q=','.join(RIVALS), per=1000)['rows']
mine = {r.get('domain') for r in get(action='refdomains', q=ME, per=1000)['rows']}
fresh = [r.get('domain') for r in gap if r.get('domain') not in mine]
scores = get(action='bulk_dr', domains=','.join(fresh[:2000]))['rows']
with open('prospects.csv', 'w', newline='') as f:
wr = csv.writer(f)
for row in scores:
wr.writerow([row.get('domain'), row.get('dr')])
print(len(fresh), 'candidates')
Uygulamalı örnek, varsayımsal sayılar
Küçük bir niş blog için uydurma bir çalıştırma; sizinkiler farklı olacaktır
Adım
Çıkan satırlar
Krediler
3 rakibin kesişimi
640 alan adı
2
Kendi link veren alan adlarınız çıkarıldı
410 kaldı
2
410 alan adı için toplu DR
410 puanlandı
1
DR 20 ve üzeri tutuldu
yaklaşık 120
0
İlk 30 elden kontrol edildi
30 sayfa açıldı
0
CSV'den spam yapmadan dış bağlantıya
01
Örtüşmeye göre sırala
İki veya üç rakibinize link veren alan adları, size link vermesi için tematik bir nedene sahip olanlardır. Onları en üste koyun.
02
Otuz tanesini elle aç
Rakibe link veren sayfaya bakın. Bu bir kaynak listesi mi, bir inceleme mi, bir haber mi? Bunların sadece bazıları yeni bir girdi kabul eder.
03
Bir cile gerekçe yaz
Sitenizin rakibin sayfasında olmayan ne kattığını söyleyin. Eğer bunu bir cümleyle söyleyemiyorsanız, o siteyi geçin.
04
Ne gönderdiğinizi kaydedin
CSV dosyasına tarih, iletişim bilgisi ve sonuç sütunları ekleyin ve commit edin. Önümüzdeki çeyrek sizi minnettar edecek.
Hatalar ve düzeltmeler
Keşif betikleri aynı birkaç yerde hata yapar
Hata
Neden zarar verir
Düzeltme
Yalnızca DR'ye göre sıralama
Büyük dizinler ve tarayıcılar en üste çıkar
Önce örtüşme sayısına göre, sonra DR'ye göre sırala
Bir eşik değerinin üzerindeki herkese mail gönderme
Spam gibi okunur, itibar kaybına yol açar
İlk 30'u elle aç
URL kodlamasını elle yapma
Virgüller ve eğik çizikler sorguyu bozar
urllib.parse.urlencode kullan
3.000 alan adını tek bir çağrıda gönderme
2.000 sınırının üzerinde
Listeyi parçalara böl, her parça için bir kredi
DR'yi kalite olarak kabul etme
Link veren alan adlarının logaritmik bir sayımıdır
Onu bir yargı yerine bir sıralama anahtarı olarak kullan
Okuyucunuzu paylaşan rakipleri seçme
Rakipler kesişimin ne döndürdüğünü belirler. Bir backlink bulucu, ona beslediğiniz listeden çok iyi değildir. Aynı okuyucuya hitap eden üç doğrudan rakip temiz bir örtüşme sağlar, ancak her şeyde sıralama yapan büyük bir yayıncı, sayfanız hakkında hiçbir şey söylemeyen binlerce link verir.
Bisiklet tamiri hakkında küçük bir blog işlettiğinizi varsayın. Rakipleriniz iki tamir blogu ve güçlü bir rehber bölümü olan bir mağaza olabilir. Bu iyi bir kümedir. Ulusal bir yayıncı eklerseniz, listeniz bisiklet bloguna asla link vermeyecek sayfalarla dolar.
İki ila on alan adı uç noktanın kabul ettiği aralıktır, bu yüzden bu aralıktaki kümeyi seçin. Listeyi, her bir rakibi hafızanızdan adlandırabileceğiniz kadar kısa tutun. Kısa listeler savunması daha kolaydır.
Devasa hub'ların kümeyi nasıl kirlettiği
Dizinler ve toplayıcılar neredeyse her şeye link verir. Her kesişimde ortaya çıkarlar ve gerçek ilgiyle link veren birkaç alan adını gömerler. Güvenmeden önce sıralı listenin başını okuyun.
Basit bir hariç tutma dosyası bunun çoğunu düzeltir. Asla istemediğiniz alan adlarını tek bir metin dosyasında, satır başına bir tane olacak şekilde tutun. Bir kümeye yükleyin ve puanlama çağrısından önce eşleşmeleri düşürün, böylece krediler yalnızca okunmaya değer adaylara harcanır.
Rakipleri ve kendi sitenizi ayrı tutma
Kendi alan adınız asla bir rakip olmamalıdır. Bu açık gibi görünse de, eski bir projeden kopyalanan bir liste bunu genellikle beraberinde taşır ve sonra kesişim kendi linklerinizi size geri bildirir.
Rakipleri betiğin başındaki bir yapılandırma sözlüğüne koyun, her birinin neden orada olduğu konusunda bir yorum yazın. Bir ay sonra nedeni hatırlayacaksınız ve repoyu okuyan bir yabancı da öyle yapacaktır.
Filtrelemeden önce ham satırları okuma
Kod her alanı .get ile okur, bu da eksik bir anahtarın çalışmayı çökertmesini engeller. Ancak yanlış bir anahtarı da gizler. Herhangi bir filtre yazmadan önce kesişimden bir satır yazdırın ve alan adlarını ve her değerin türüne bakın.
Metin olarak gelen bir puan metin olarak sıralanır, bu yüzden 9, 80'in ardından gelir. Çağrıdan hemen sonra bir kez sayıya dönüştürün, betiğin geri kalanı basit kalabilir.
Karşılaştırmadan önce alan adlarını normalize etme
Aynı site bir listede www. ön ekiyle, diğerinde ise olmadan görünebilir. Kümeleri karşılaştırmadan önce her şeyi küçük harfe çevirin ve ön eki kaldırın. Aksi takdirde kendi siteniz yeni bir aday gibi görünebilir.
Geçmiş bir kopyalamadan kaynaklanan son virgüller ve boşluklar aynı sorunu yaratır. Tek satırlık bir temizleme işlevi, harcanmış bir puanlama çağrısından daha az maliyetlidir.
Her çalıştırmanın tarihli bir kopyasını tutma
Her çalıştırmayı tarihli bir dosyaya yazın ve öncekini koruyun. Böylece yeni adayları daha önce gördüklerinizden ayırabilir ve bir rakibin yeni bir yere link vermeye başladığı zamanı görebilirsiniz.
Tarihli dosyalar aynı zamanda garip bir sonucu hata ayıklamanın en kolay yoludur. İki dosyayı yan yana açın ve değişiklik genellikle açıktır.
Yalnızca hayatta kalanları puanla
Toplu çağrı tek seferde 2.000 alan adını alır. Çıkarma işleminin hayatta kalanlarını ona verin, tüm kesişimi değil. Yukarıdaki uydurma çalıştırmada 640 satır ve 410 satır tek bir çağrıda puanlanma açısından aynı maliyete sahiptir, ancak daha küçük liste çok daha kolay okunur.
Bulucuyu çalıştırmadan önce sorular
İnsanların bu işin bu kısmına getirdikleri soruların çoğu maliyet, sıralama ve bir çağrı başarısız olduğunda ne olacağıyla ilgilidir.
Bir keşif listesi oluşturmak çok maliyetli mi?
Çok değil. Tarif kesişim, refdomains ve bulk_dr kullanır, bu yüzden gösterilen boyutta bir çalıştırma başına beş kredi, yani 0,0005 $. Önümüzdeki ay yapılan bir yeniden çalıştırma aynı maliyete sahiptir. Gerçek maliyet, sayfaları okumaya harcadığınız kendi zamanınızdır.
Neden kesişimi DR'ye göre sıralayıp orada durmuyorsun?
DR, link veren alan adlarını logaritmik bir ölçekte sayar. Büyük dizinler, ilgililiklerinden bağımsız olarak en üste çıkar, bu yüzden önce örtüşmeye göre sıralayın ve DR'yi ana anahtar olarak değil, bir eşitlik kırıcı olarak kullanın.
CSV'deki her şeye dış bağlantı gönderebilir miyim?
Gönderebilirsiniz, ancak listenin kötü bir kullanımıdır. Rakibe link veren sayfayı açın, yeni bir girdinin uyup uymayacağına karar verin ve sonra yazın. CSV bir kısa listedir, bir posta listesi değil.
Kaç rakiple başlamalıyım?
Üç iyi bir başlangıçtır, kesişimin kabul ettiği iki ila on aralığındadır. İlk çalıştırma sıralanacak kadar az satır döndürdüğünde daha fazla ekleyin.
Kendi alan adımda henüz link veren alan adım yoksa ne olur?
O zaman çıkarma hiçbir şeyi kaldırmaz ve her kesişim satırı bir aday olur. Bu doğrudur ancak liste uzun olacaktır. Örtüşme ile küçültün ve ilk otuzu elle okuyun.
Betik için ücretli bir anahtar gerekiyor mu?
Evet. Kesişim, refdomains ve bulk_dr çağrıları kredi başına fiyatlandırılır. Ücretsiz genel bakış eylemi bir anahtar gerektirmez ve 100 $ kayıt kredisi bu boyuttaki birçok çalıştırmayı kapsar.
Tek bir mesaj gönderilmeden önce
Aday sayfasını açın ve link veren sayfanın rakibe link verdiğinden emin olun, sadece linkler listesine değil.
Sayfanın yalnızca anahtar kelimenize değil, okuyucunuza uygun olduğundan emin olun.
Daha önce iletişim kurduğunuz her alan adını kaldırın ve yanına tarihi kaydedin.
Sitenizin ne kattığına dair bir cümle yazın veya adayı bırakın.
Yanıtların gerçekten okunabilmesi için küçük partiler halinde gönderin.
Bulucuyu bir zamanlamayla çalıştırma
Keşif listeleri çoğu insanın beklediğinden daha yavaş eskir. Aylık yeterlidir. Rakipten yeni linkler aylık yenileme ile görünür, bu yüzden her birkaç haftada bir yapılan bir çalıştırma çoğunu yakalar. Haftalık çalıştırmalar çoğunlukla geçen haftanın dosyasını yeniden üretir, bu yüzden aynı backlink bulucu sessizce ve gürültü olmadan çalışabilir.
Akıllı ritim, puanlama için aylık ve her çalıştırmadan sonra üst satırlara hızlı bir bakıştır. Listenin zaten sahip olduklarınızı içermemesi için çıkarma adımını aynı işin içinde tutun.
Anahtarı dosyadan uzak tutma
Betik anahtarı ortamdan okur, bu yüzden repoda asla oturmaz. Zamanlayıcınızda LZ_KEY'i bir gizli değer olarak ayarlayın veya git dışında kalan bir dosyadan dışa aktarın.
Bir crontab satırı, değişken önünde ayarlanmış aynı betiği çağırabilir. Anahtarı tutan dosyanın sunucuda sıkı izinlere sahip olduğundan emin olun.
CSV yazmadan önce hata ver
Bir 401 veya 402 çalışmayı durdurmalı, ok bayrağı false okuduğunda da öyle olmalıdır. Kod dosya açılmadan önce hata verir, bu yüzden başarısız bir çalıştırma dününün CSV dosyasını kısmi bir dosyayla ezmez.
Her çalıştırmayla harcamayı logla
Her yanıt _credits içerir, bu yüzden işin sonunda bakiyeyi yazdırın. Birkaç ay boyunca bu satır, bir zamanlamanın planladığınız maliyete mal olup olmadığını ve bir döngünün sayfaları yeniden getirmeye başlayıp başlamadığını söyler.
Tarihi bir dosya klasörü yerine bir veritabanında istiyorsanız, bunu SQLite diff ile eşleştirin.
DR'nin ne söyleyebileceği ve ne söyleyemeyeceği hakkında bir söz
Buradaki DR round(100 * log(ref_domains + 1) / log(20,000,000))'dir. Link veren alan adlarıyla yükselir ve hiçbir şey else. Bunu aklınızda tutun. Bir site 55'te oturabilir ve yine de sizin için kullanışsız olabilir.
Sıralamak için kullanın, sonra okuyun. Sitenin ne yayınladığına, yüzlerce alakasız dükkan link verip vermediğine ve üzerinde son zamanlarda bir değişiklik olup olmadığına bakın. Bu kontroller site başına bir dakika sürer ve hiçbir betik bunların yerini tutmaz.
Liste temizlendiğinde, onu tarihli bir dosya olarak tutun ve bir ay sonra yeniden çalıştırın. Actions runbook nasıl zamanlayacağını gösterir ve n8n karşılaştırması dış bağlantı kişisi tercih ederse kod yok yoluyla kapsar.
Oran ve boyut notları
Her çağrı en fazla 1.000 satır döndürür ve bir kez faturalandırılır, bu yüzden 5.000 kesişim satırını sayfalama yapmak 10 krediye, yani 0,001 $'a mal olur. Derin sayfalama 50.000 satırda durur. Python'da büyük bir listeyi sonradan sıralamak yerine sunucuda sort ve order=desc kullanın.