2013-11-22 114 views
-1

我是一個蟒蛇新手我想要做的是創建兩個腳本。下載網頁信息和下載鏈接的其他腳本,並輸出下載到列表中的鏈接總數的摘要。從網頁使用Python下載

第一個腳本(下載網頁)

import sys, urllib 
def getWebpage(url): 
    print '[*] getWebpage()' 
    url_file = urllib.urlopen(url) 
    page = url_file.read() 
    return page 
def main(): 
    sys.argv.append('http://www.funeralformyfat.tumblr.com) 
    if len(sys.argv) != 2: 
     print '[-] Usage: webpage_get URL' 
     return 
    else: 
     print getWebpage(sys.argv[1]) 

if __name__ == '__main__': 
    main() 

第二個腳本(下載鏈接和輸出的下載到列表的鏈接總數的摘要。)

import sys, urllib 
def print_links(page): 
    print '[*] print_links()' 
    links = re.findall(r'\<a.*href\=.*http\:.+', page) 
    links.sort() 
    print '[+]', str(len(links)), 'HyperLinks Found:' 

    for link in links: 
     print link 

def main(): 
    sys.argv.append('http://www.funeralformyfat.tumblr.com') 
    if len(sys.argv) != 2: 
     print '[-] Usage: webpage_links URL' 
     return 
     page = webpage_get.getWebpage(sys.argv[1]) 
     print_links(page) 


if __name__ == '__main__': 
    main() 

我代碼運行,但它不返回任何鏈接。任何人都可以看到這個問題?

+2

歡迎來到SO!你能否因爲同樣的原因而製作一個更小的程序?找一個最簡單的例子,讓自己和其他人回答這個問題會容易得多。 –

+0

您的縮進不時會出錯......我假設您希望在第一個腳本中的main函數的print *內部*和print_links中的for循環*內部*。此外,對於這樣一個任務,你應該考慮不使用正則表達式http://stackoverflow.com/questions/1732348 :-) –

+0

@cirosantilli這裏的例子沒有太多的代碼和罰款。有時需要發佈完整代碼才能識別錯誤。 PS - 沒有太多的縮短可以完成這一個。 –

回答

0
print getWebpage(sys.argv[1]) <---- IndexError: list index out of range 

sys.argv尚未更新(追加在main功能具有被稱爲尚)

你應該嘗試以下&看到自己的工作。

import sys, urllib 
def getWebpage(url): 
    print '[*] getWebpage()' 
    url_file = urllib.urlopen(url) 
    page = url_file.read() 
    return page 
def main(): 
    sys.argv.append('http://www.funeralformyfat.tumblr.com') 
    if len(sys.argv) != 2: 
     print '[-] Usage: webpage_get URL' 
     return 
    else: 
     print getWebpage(sys.argv[1]) 

if __name__ == '__main__': 
    main() 


NameError: name 'links' is not defined 

這一次是因爲有一個定義該變量的函數外部scopedlinks列表。正確的縮進將是

def print_links(page): 
    print '[*] print_links()' 
    links = re.findall(r'\<a.*href\=.*http\:.+', page) 
    links.sort() 
    print '[+]', str(len(links)), 'HyperLinks Found:' 

    for link in links: 
     print link 
+0

如果仔細觀察提供的代碼,您會看到命令行參數被添加到main()函數中。 –

+0

完成。感謝您告訴。 –

+0

@AshishNitinPatil嗨,謝謝你的回覆。我做了改變,但現在我在這條線上出現了一個錯誤; sys.argv.append('http://www.funeralformyfat.tumblr.com') NameError:全局名稱'sys'沒有定義,你知道這是爲什麼嗎? – NatD