Python kullanarak bir web'deki bağlantılar nasıl izlenir

İçindekiler

Bugün sana öğreteceğim Python ile bir sayfadaki bağlantılar arasında döngü (web kazıma), bu, bir web sitesindeki içeriği otomatik olarak izlemek için çok yararlı olabilir ve bunu elle yapmak zorunda kalmazsınız. Getirdiğim programda, her bağlantı html okunarak elde edilir, programı belirli bir içeriği arayacak ve yalnızca ilgilendiğiniz bağlantıları gösterecek şekilde değiştirebilirsiniz.

Ayrıca robots.txt dosyasını veya web sitelerinin sahip olduğu site haritalarını kullanarak web kazıma işlemi yapabilirsiniz.

NotGösterilen kod Python 3.x'te çalışıyor, 2.x sürümünde çalıştırmak istiyorsanız küçük değişiklikler yapmanız gerekecek.

İşte kod:

 kuyruğu içe aktar urllib.request'i içe aktar urllib.parse'den yeniden içe aktar urljoin tanımını içe aktar indir (sayfa): deneyin: request = urllib.request.Request (sayfa) html = urllib.request.urlopen (istek) .read () yazdır ("[ *] İndir Tamam >> ", sayfa) hariç: yazdır ('[!] İndirme hatası', sayfa) dönüş Yok dönüş html def crawlLinks (sayfa): searchLinks = yeniden derleme ('] + href = ["'] ( . *?) ["']', re.IGNORECASE) kuyruk = kuyruk.Kuyruk () kuyruk.put (sayfa) ziyaret edildi = [sayfa] print ("" içindeki bağlantılar aranıyor, sayfa) while (queue.qsize () > 0): html = indir (queue.get ()) if html == Yok: devam bağlantıları = linklerdeki bağlantı için searchLinks.findall (str (html)): link = urljoin (sayfa, str (bağlantı)) if ( bağlantı ziyaret edilmedi): tail.put (bağlantı) ziyaret edildi.append (bağlantı) if __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
yaptığımız ilk şey bengerekli kütüphaneleri içe aktar, normal ifadeler için (yeniden), kuyruğu (kuyruk) kullanmak, istekte bulunmak ve bir sayfayı okumak (urllib.request) ve bir temel URL'den ve başka bir URL'den (urljoin) mutlak URL'ler oluşturmak için.

2 fonksiyona bölünmüş kod
indirmekBir sayfanın html dosyasını indirmemize yardımcı olur. Çok fazla açıklamaya ihtiyaç duymaz, yaptığı tek şey istenen sayfaya istek gelmesidir, html'sini okur, her şey yolunda giderse Download OK mesajı gösterir, eğer bir hata olduğunu göstermiyorsa (İşte burada biz hata hakkında bilgi gösterebilir), sonunda html read veya None değerini döndürür.
Bağlantıları izleAna işlevdir ve her bağlantıdan geçecektir. Biraz açıklayalım:

  • Html'deki bağlantıları bulmamıza yardımcı olan normal ifadeli bir değişken oluşturuyoruz.
  • İlk sayfa ile tail türünde bir değişken başlatıyoruz, bu, bağlantıları keşfettiğimiz "sırada" kaydetmemize yardımcı olacak. Ayrıca, bağlantıları ziyaret edildiklerinde kaydetmek için kullanacağımız, ziyaret edilen adında bir liste tipi değişken başlatıyoruz, bu sonsuz bir döngüden kaçınmak için yapılır, x sayfasının y sayfasına atıfta bulunduğunu ve bunun da x sayfasına atıfta bulunduğunu hayal edin, tüm bu bağlantıları sonsuza kadar ekleyeceğiz.
  • İşlevin özü, kuyrukta bağlantılar olduğu sürece yürütülecek olan while döngüsüdür, bu nedenle boyutun 0'dan büyük olup olmadığını kontrol ederiz. Her geçişte kuyruktan bir bağlantıyı kaldırır ve indirme işlevine göndeririz. , bu bize html'yi döndürecek, sonra bağlantıları arıyoruz ve daha önce ziyaret edip etmediğimizi kontrol ediyoruz, değilse kuyruğa ve listeye ekliyoruz.

NotListe gereksiz gibi görünebilir, ancak bağlantıları kaldıracağız ve kuyruktan sileceğiz, bu nedenle kontrol doğru olmaz, belki bir süre önce ziyaret ettiğimiz bağlantı ve artık kuyrukta değil, ancak listede olacak.

Kodun işlevlerin dışındaki son kısmı, kodun yürütülmesiyle ilgilenecektir. Aşağıdaki resimde, çözücü izleme, çalışan kodun bir ekran görüntüsünü görebilirsiniz.

Dilerseniz python için var olan BeautifulSoup adında bir kütüphane ile kendinize yardımcı olabilirsiniz, kullanımı çok kolay görünecek, tavsiye ederim.

Kodu isterseniz, işte bir zip:

TraverseLinks.zip 646 bayt 493 İndirilenler

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave