Python ve Mini spider
Oct
16
PYTHON:
-
#!/usr/bin/env python
-
import re
-
import sys
-
import os
-
import urllib2
-
import sgmllib
-
#Gerekli modulleri yüklüyoruz
-
-
##### Basit URL ayıklayıcı Class ######
-
class MyParser(sgmllib.SGMLParser):
-
-
def parse(self, s):
-
"İlk ayıklama adımı"
-
self.feed(s)
-
self.close()
-
-
def __init__(self, verbose=0):
-
"Class başladığında ilk çalışçak kısım"
-
-
sgmllib.SGMLParser.__init__(self, verbose)
-
self.hyperlinks = []
-
-
def start_a(self, attributes):
-
"Tüm linkleri tarıyoruz"
-
-
for name, value in attributes:
-
if name == "href" :
-
self.hyperlinks.append(value)
-
-
def get_hyperlinks(self):
-
"Tüm linkleri geri döndürüyoruz."
-
-
return self.hyperlinks
-
-
import urllib, sgmllib
-
-
##### Tüm site gezme işini yapan fonksiyon #########
-
def get_data(url):
-
try:
-
req=urllib2.Request(url=url,headers={'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113'})
-
f = urllib2.urlopen(req)
-
s = f.read()
-
-
except:
-
print "%s islemi yapamadim..." % url
-
return s
-
-
####### Haberi ayıklayıp düz metin haline getirme ########
-
def parseHabers(data):
-
temp_data = data.split('<span class="textBodyBlack">')
-
gen_data = ""
-
a=0
-
for row in temp_data:
-
if a> 0:
-
dataz = row.split("</span>")
-
gen_data = gen_data +"\n"+dataz[0]
-
a = 1
-
print gen_data
-
return gen_data
-
-
######## Haberin bulunduğu sayfayı işleyen kısım ##########
-
def HaberGET(url):
-
datax = ""
-
datax = re.sub("(\D)","",url)
-
if os.path.isfile("parse/"+datax+".txt"):
-
print "%s id li haber cekilmis " % datax
-
else:
-
data = get_data(url)
-
file = open("parse/"+datax+".txt","w")
-
file.write(parseHabers(data))
-
print "NEW : %s id li haber cekiliyor" % datax
-
return 0
-
##### Devam etme özelliği için , daha önce adres ziyaret edildimi kontrolü yapan fonksiyon ######
-
def ifDef(url):
-
file = open("parse/parsed.txt")
-
data = file.read()
-
file.close()
-
a = 1
-
da = data.split("\n")
-
for u in da:
-
if u == url:
-
a=0
-
-
return a
-
###### Ayakizlerini kaydeden fonksiyon (Devam etme özelliği için , adres ziyareti sırasında dosyaya yazar) #######
-
def footPrint(url):
-
file = open("parse/parsed.txt","a")
-
file.write(url+"\n")
-
file.close()
-
-
##### ve spider
-
def startParse(gurl):
-
## Hemen url'in ayak izini kaydedelim.
-
footPrint(gurl)
-
try:
-
### Sayfa içeriğini getirelim
-
s = get_data(gurl)
-
### Linkleri tarayalım
-
myparser = MyParser()
-
myparser.parse(s)
-
-
## Linkleri döngüye alalım
-
for url in myparser.get_hyperlinks():
-
###ufak bir kontrol
-
if url != "/" or url != gurl:
-
-
#### Sayfa dışına çıkmayalım ve javascriptleri göz ardı edelim
-
if len(re.findall("javascript",url)) == 0 and len(re.findall("http",url)) == 0:
-
#### Haber sayfası olup olmadığını algılayalım
-
datax = re.sub("(\D)","",url)
-
if len(datax)> 1:
-
### Haber sayfası ise haberi kaydedelim
-
HaberGET("http://www.ntvmsnbc.com/news/"+url)
-
else:
-
### haber sayfası değilse daha önce ziyaret edilmişmi kontrol edelim
-
if ifDef("http://www.ntvmsnbc.com"+url):
-
print "parsing %s" % url
-
#### Ziyaret edilmemiş ise spider'ı bu sayfaya yönlendirelim
-
startParse("http://www.ntvmsnbc.com"+url)
-
-
except:
-
print " islemi yapamadim..."
-
-
####İşlemi başlatalım
-
startParse("http://www.ntvmsnbc.com/news/default.asp?cp1=1")
Etiketler : Python, mini spider, Python, spider