2017-05-03 5 views
0

にだから私の割り当ては、すべてのWebページからのデータと印刷物の形式のすべてのハイパーリンクを読み取るプログラムを作成することです私のインストラクターの検索ハイパーリンクは、Python 3

from urllib.request import urlopen 

def findTitle(webpage): 
    encoding = "utf-8" 
    for webpagestr in webpage: 
     webpagestr = str(webpagestr,encoding) 
     if "<title>" in webpagestr: 
      indexstart = webpagestr.find("<title>") 
      indexend = webpagestr.find("</title>") 
      title = webpagestr[indexstart+7:indexend] 
      return title 
     return title 


def H1headings(webpage): 
    encoding = "utf-8" 
    for webpagestr in webpage: 
     webpagestr = str(webpagestr,encoding) 
     if "<h1>" in webpagestr: 
      indexstart = webpagestr.find("<h1>") 
      indexend = webpagestr.find("</h1>") 
      heading = webpagestr[indexstart+4:indexend] 
      print(heading) 

def main(): 
    address = input("Enter URL to find title and more information: ") 
    try: 
     webpage = urlopen(address) 
     title = findTitle(webpage) 
     print("Title is", title) 

     H1headings(webpage) 

     webpage.close() 

    except Exception as exceptObj: 
     print("Error: ", str(exceptObj)) 
main() 

私はこのプログラムを実行すると、それを入力するURLを、私を可能にするが、それは私を与えた後: エラー:ローカル変数「タイトル」割り当て

前に参照さが、私はそれが何を意味するのかわかりません。

その後、私は置かれたとき、私の試みの1:

def findTitle(webpage): 
    title = "Not Found" 
    encoding = "utf-8" 

は、プログラムを実行した、それは私を与える:

Enter URL to find title and more information: http://jeremycowart.com 
Title is not found 
<a href="http://jeremycowart.com">Jeremy Cowart</a> 

それは私が探しているものですが、私は私は信じていますタイトルと見出しとリンクテキストがあるとします。

私は近づいてきましたが、わかりません。どんな助けもありがとう!

答えて

0

私には少なくとも2つの問題があります。あなたの関数で

findTitle、あなたは常に(あなたがものを発見していない、そしてそれは、Webページのタイトルを見つけるのに失敗した時に、したがって、したがって、何にでも変数titleを設定していない場合でも、変数titleを返します1つまたはコードが見つからないために)、まだ作成/割り当てされていない変数が返されています。

まず、コードを修正してコードを修正する必要があります。最終的なreturn文を変更して、デフォルト値を返すか、 "Not found"またはあなたはそれが返されたとき、それは関係なく存在する保証あなたの機能、例えば:私は好む傾向にあるパターンです

def foo(x): 
    y = -1 
    <do stuff, maybe re-setting y> 
    return y 

の一番上にデフォルト値にタイトルを設定することができます。

ただし、タイトルを正しく検出できないという別の問題があります。あなたがあなたのプログラムを歩いていくなら、あなたはそれを見なければなりません。基本的には、ループを開始し、最初の行を取得し、タイトルがあるかどうかを確認します。それはあなたがそれを返すか(良い)、もしそうでなければ、あなたはそれをスキップしますが、あなたはそれをとにかく返します(それほど良くない)。