2016-02-03 3 views
0

Я пытаюсь создать базовый веб-искатель, используя красивый суп в python 2.7. Вот мой код:Использование красивого супа в python 2

import re 
import httplib 
import urllib2 
from urlparse import urlparse 
from bs4 import BeautifulSoup 

regex = re.compile(
     r'^(?:http|https)s?://' # http:// or https:// 
     r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain... 
     r'localhost|' #localhost... 
     r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip 
     r'(?::\d+)?' # optional port 
     r'(?:/?|[/?]\S+)$', re.IGNORECASE) 

def isValidUrl(url): 
    if regex.match(url) is not None: 
     return True; 
    return False 

def crawler(SeedUrl): 
    tocrawl=[SeedUrl] 
    crawled=[] 
    while tocrawl: 
     page=tocrawl.pop() 
     print 'Crawled:'+page 
     pagesource=urllib2.urlopen(page) 
     s=pagesource.read() 
     soup=BeautifulSoup.BeautifulSoup(s) 
     links=soup.findAll('a',href=True)   
     if page not in crawled: 
      for l in links: 
       if isValidUrl(l['href']): 
        tocrawl.append(l['href']) 
      crawled.append(page) 
    return crawled 

crawler('https://www.google.co.in/?gfe_rd=cr&ei=SfWxVs65JK_v8we9zrj4AQ&gws_rd=ssl') 

Я получаю сообщение об ошибке:

Просканировано https://www.google.co.in/?gfe_rd=cr&ei=SfWxVs65JK_v8we9zrj4AQ&gws_rd=ssl Traceback (самый последний вызов последним): Файл "web_crawler_python_2.py", строка 38, в гусеничном ('https://www.google.co.in/?gfe_rd=cr&ei=SfWxVs65JK_v8we9zrj4AQ&gws_rd=ssl') Файл "web_crawler_python_2.py", строка 29, в гусеничном суп = BeautifulSoup.BeautifulSoup (ы) AttributeError: тип объекта 'BeautifulSoup' не имеет атрибут 'BeautifulSoup'

Я пробовал много, но не могу отлаживать его. Может ли кто-нибудь указать мне на проблему. (Как примечание, я знаю, что многие веб-сайты не позволяют сканировать, но я просто делаю это, чтобы учиться).

Спасибо, любая помощь будет оценена.

Источника Я использовал для кода: simple web crawler

ответ

2

Этого класса не атрибут BeautifulSoup. Я не знаю, почему вы его использовали. Пример из documentation:

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html_doc, 'html.parser') 

Вам нужно заменить:

BeautifulSoup.BeautifulSoup 

в

BeautifulSoup 
+0

Спасибо! Это сработало! Не могли бы вы рассказать мне, в чем проблема? –

+1

@MahatmaGandhi: использование 'soup = BeautifulSoup.BeautifulSoup (s)' отлично подходит для версии 3; для версии 4 используется: 'soup = bs4.BeautifulSoup (s)' – Quinn

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