2017-05-03 68 views
0

所以,我的任務是編寫一個程序,讀取網頁的所有數據,並打印表格的所有超鏈接:查找超鏈接在Python 3

<a href="link">link text</a> 

到目前爲止,我已經得到了這麼遠的幫助我的教練。

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,但它給了我後: 錯誤:局部變量「標題」分配

之前引用我不知道這意味着什麼。

後來,當我把我的嘗試之一:

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

我看到至少有幾個問題。

在你的函數findTitle,你總是返回變量title,即使你有沒有發現一個,因此沒有設置變量title到任何東西,因此,當它未能找到網頁上的標題(無論是因爲沒有一個或者你的代碼沒有找到它),它會返回一個尚未創建/分配的變量。

首先,你應該修復你的代碼,所以它不這樣做。您可以更改最終返回語句以返回默認值,例如"Not found"或者你可以在你的功能,保證會存在無論返回時,例如:

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

這就是我傾向於選擇圖案頂部設置標題爲默認值。

但還有另一個問題,這是阻止你正確地檢測標題。如果你通過你的程序,你應該看到它。本質上,你開始循環,獲取第一行,檢查它是否有標題;如果它返回它(好),如果它不跳過if,但是然後你返回它(不太好),你永遠不會到達第二行。