Python ve Mini spider

PYTHON:
  1. #!/usr/bin/env python
  2. import re
  3. import sys
  4. import os
  5. import urllib2
  6. import sgmllib
  7. #Gerekli modulleri yüklüyoruz
  8.  
  9. ##### Basit URL ayıklayıcı Class ######
  10. class MyParser(sgmllib.SGMLParser):
  11.  
  12.     def parse(self, s):
  13.         "İlk ayıklama adımı"
  14.         self.feed(s)
  15.         self.close()
  16.  
  17.     def __init__(self, verbose=0):
  18.         "Class başladığında ilk çalışçak kısım"
  19.  
  20.         sgmllib.SGMLParser.__init__(self, verbose)
  21.         self.hyperlinks = []
  22.  
  23.     def start_a(self, attributes):
  24.         "Tüm linkleri tarıyoruz"
  25.  
  26.         for name, value in attributes:
  27.             if name == "href" :
  28.                 self.hyperlinks.append(value)
  29.  
  30.     def get_hyperlinks(self):
  31.         "Tüm linkleri geri döndürüyoruz."
  32.  
  33.         return self.hyperlinks
  34.  
  35. import urllib, sgmllib
  36.  
  37. ##### Tüm site gezme işini yapan fonksiyon #########
  38. def get_data(url):
  39.     try:
  40.         req=urllib2.Request(url=url,headers={'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113'})
  41.         f = urllib2.urlopen(req)
  42.         s = f.read()
  43.  
  44.     except:
  45.         print "%s islemi yapamadim..." % url
  46.     return s
  47.  
  48. ####### Haberi ayıklayıp düz metin haline getirme ########
  49. def parseHabers(data):
  50.     temp_data = data.split('<span class="textBodyBlack">')
  51.     gen_data = ""
  52.     a=0
  53.     for row in temp_data:
  54.         if a&gt; 0:
  55.             dataz = row.split("</span>")
  56.             gen_data = gen_data +"\n"+dataz[0]
  57.         a = 1
  58.     print gen_data
  59.     return gen_data
  60.  
  61. ######## Haberin bulunduğu sayfayı işleyen kısım ##########
  62. def HaberGET(url):
  63.     datax = ""
  64.     datax = re.sub("(\D)","",url)
  65.     if os.path.isfile("parse/"+datax+".txt"):
  66.         print "%s id li haber cekilmis " % datax
  67.     else:
  68.         data = get_data(url)
  69.         file = open("parse/"+datax+".txt","w")
  70.         file.write(parseHabers(data))
  71.         print "NEW : %s id li haber cekiliyor" % datax
  72.     return 0
  73. ##### Devam etme özelliği için , daha önce adres ziyaret edildimi kontrolü yapan fonksiyon ######
  74. def ifDef(url):
  75.     file = open("parse/parsed.txt")
  76.     data = file.read()
  77.     file.close()
  78.     a = 1
  79.     da = data.split("\n")
  80.     for u in da:
  81.         if u == url:
  82.             a=0
  83.  
  84.     return a
  85. ###### Ayakizlerini kaydeden fonksiyon (Devam etme özelliği için , adres ziyareti sırasında dosyaya yazar) #######
  86. def footPrint(url):
  87.     file = open("parse/parsed.txt","a")
  88.     file.write(url+"\n")
  89.     file.close()
  90.  
  91. ##### ve spider
  92. def startParse(gurl):
  93.     ## Hemen url'in ayak izini kaydedelim.
  94.     footPrint(gurl)
  95.     try:
  96.         ### Sayfa içeriğini getirelim
  97.         s = get_data(gurl)
  98.         ### Linkleri tarayalım
  99.         myparser = MyParser()
  100.         myparser.parse(s)
  101.  
  102.         ## Linkleri döngüye alalım
  103.         for url in myparser.get_hyperlinks():
  104.             ###ufak bir kontrol
  105.             if url != "/" or url != gurl:
  106.  
  107.                 #### Sayfa dışına çıkmayalım ve javascriptleri göz ardı edelim
  108.                 if len(re.findall("javascript",url)) == 0 and len(re.findall("http",url)) == 0:
  109.                     #### Haber sayfası olup olmadığını algılayalım
  110.                     datax = re.sub("(\D)","",url)
  111.                     if len(datax)&gt; 1:
  112.                         ### Haber sayfası ise haberi kaydedelim
  113.                         HaberGET("http://www.ntvmsnbc.com/news/"+url)
  114.                     else:
  115.                        ### haber sayfası değilse daha önce ziyaret edilmişmi kontrol edelim
  116.                         if ifDef("http://www.ntvmsnbc.com"+url):
  117.                             print "parsing %s" % url
  118.                             #### Ziyaret edilmemiş ise spider'ı bu sayfaya yönlendirelim
  119.                             startParse("http://www.ntvmsnbc.com"+url)
  120.  
  121.     except:
  122.         print " islemi yapamadim..."         
  123.  
  124. ####İşlemi başlatalım
  125. startParse("http://www.ntvmsnbc.com/news/default.asp?cp1=1")

convert this post to pdf.
Etiketler : Python, , ,

Leave a Reply




*
To prove you're a person (not a spam script), type the answer to the math equation shown in the picture. Click on the picture to hear an audio file of the equation.
Click to hear an audio file of the anti-spam equation