2016-11-13 4 views
-2

私はRyan MitchellによるPythonでWeb Scrapingという本から学びました。本には、ウェブサイトからの外部リンクを取得するコードがあります。私はそれが本の中にあるのと同じコードを使っているにしても(私が行った唯一の事は 'urllib.request'を 'urllib2'に変更していた)、私は同じエラーを受けています。 Pythonのバージョンは2.7.12です。スクリプトを使用してPythonで 'グローバル名が定義されていません'というエラーが発生する

File "test.py", line 28, in <module> 
getAllExternalLinks("http://www.oreilly.com") 
File "test.py", line 16, in getAllExternalLinks 
internalLinks = getInternalLinks(bsObj, splitAddress(siteUrl)[0]) 
NameError: global name 'getInternalLinks' is not defined 

これは私が使用しているコードは次のとおりです。 これは誤りです。

from urllib2 import urlopen 
from urlparse import urlparse 
from bs4 import BeautifulSoup 
import re 
allExtLinks = set() 

allIntLinks = set() 

def getAllExternalLinks(siteUrl): 

    html = urlopen(siteUrl) 

    bsObj = BeautifulSoup(html) 

    internalLinks = getInternalLinks(bsObj,splitAddress(siteUrl)[0]) 

    externalLinks = getExternalLinks(bsObj,splitAddress(siteUrl)[0]) 

    for link in externalLinks: 

     if link not in allExtLinks: 

      allExtLinks.add(link) 

      print(link) 

    for link in internalLinks: 

     if link not in allIntLinks: 

      print("About to get link: "+link) 

      allIntLinks.add(link) 

      getAllExternalLinks(link) 

getAllExternalLinks("http://www.oreilly.com") 
+0

私はこの本のどのエディションを使用しているのか、このスニペットをコピーできたのか分かりませんが、コードの半分がありません。完全な例は[githubで利用可能]です(https://github.com/REMitchell/python-scraping/blob/master/chapter3/5-getAllExternalLinks.py)。 –

答えて

0

コンパイルする前に、サンプルコードをよく読んでください。 あなたのコードには、getInternalLinks()関数がありません。

関連する問題