2015-02-05 6 views
0

Я использую код из «Введение в вычисления с использованием python», чтобы сделать веб-искатель. То, что я надеюсь сделать, - это избежать определенного веб-сайта, такого как Google или Yahoo, из-за его размера и возможности направлять меня в Андромеду.О Python Webcrawler

Поэтому я создал self.prohibited раздел для просмотра определенных веб-страниц. Однако, это не сработает. У вас есть какое-то предложение исправить? Большое спасибо заранее.

def analyze(url): 
    '''returns the list of http links 
    in absolute format in the web page with URL url''' 

    print('Visiting: ', url) # for testing 

    # obtain links in the web page 
    content=urlopen(url).read().decode() 
    collector=Collector(url) 
    collector.feed(content) 
    urls = collector.getLink() 

    # compute word frequencies 
    content=collector.getData() 
    freq=frequency(content) 

    out=open('test.csv', 'a') 
    print(out, 'URL', 'word', 'count') 
    csv=writer(out) 


    #print the frequency of every text data word in web page 
    print('\n {:50}{:10}{:5}'.format('URL', 'word', 'count')) 
    for word in freq: 
     row1=(url, word, freq[word]) 
     print('\n {:50} {:10} {:5}'.format(url, word, freq[word])) 
     csv.writerow(row1) 

    print('\n {:50} {:10}'.format('URL', 'link')) 
    for link in urls: 
     print('\n {:50} {:10}'.format(url, link)) 
     row2=(url, link) 
     csv.writerow(row2) 

    return urls 


class Crawler: 
    'a web crawler' 
    def __init__(self): 
     self.visited = set() 
     self.prohibited=['*google.com/*','*yahoo.com/*'] 

    def crawl(self, url): 
     '''calls analyze() on web page url 
     and calls itself on every link to an univisted webpage''' 
     links=analyze(url) 
     self.visited.add(url) 

     for link in links: 
      if link not in self.visited and self.prohibited: 
       try: 
        self.crawl(link) 
       except: 
        pass 

ответ

0

link not in self.visited and self.prohibited в основном эквивалентна link not in self.visited, а self.prohibited всегда оценивается в True в этом заявлении. (self.prohibited - это не пустой список)

Я думаю, вы хотите заменить self.prohibited на следующее: not any(re.match(x, link) for x in self.prohibited). Этот код проверяет для каждого запрещенного регулярного выражения, если ссылка соответствует регулярному выражению.

+0

К сожалению. Я думаю, что пока я копирую и вставляю его с моего питона и пишу эту статью, эта часть была удалена или пропущена. –

+0

Мой ответ все еще дал вам правильный фрагмент кода;) Я обновил его, чтобы объяснить вам, что он делает. –

+0

Спасибо Валентин. –

Смежные вопросы