2013-11-23 125 views
0

我有兩套腳本。一個下載一個網頁,另一個下載網頁上的鏈接。它們都運行,但鏈接腳本不返回任何腳本。任何人都可以看到或告訴我爲什麼?用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.bbc.co.uk') 
    if len(sys.argv) != 2: 
     print '[-] Usage: webpage_get URL' 
     return 
    else: 
     print getWebpage(sys.argv[1]) 

if __name__ == '__main__': 
    main() 

鏈接腳本

import sys, urllib, re 
import getWebpage 
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.bbc.co.uk') 
    if len(sys.argv) != 2: 
     print '[-] Usage: webpage_links URL' 
     return 
    page = webpage_get.getWebpage(sys.argv[1]) 
    print_links(page) 
+0

來看,它從[命令行](http://learnpythonthehardway.org/book/appendixa.html)。您應該看到'ImportError'或'NameError'('getWebpage' vs.'webpage_get')。 – jfs

+0

這看起來不正確:'import getWebpage'給出這種用法:'page = webpage_get.getWebpage(sys.argv [1])''。假設您的文件名爲'webpage_get.py',並且yoiu在同一個目錄中有一個名爲'\ _ \ _ init \ _ \ _。py'的文件,您需要這樣做:'from webpage_get import getWebpage; page = getWebpage(sys.argv [1])' – hughdbrown

+1

另外,你在第二個腳本中沒有對'main()'的調用,所以它可能根本沒有任何作用。 – hughdbrown

回答

0

你的正則表達式沒有結束,所以當你發現第一次爲你使用http它會顯示你整個頁面的其餘\:+這意味着所有的回報是什麼。等到HTML頁面的最後,你需要指定爲正則表達式

1

這將解決大多數你的問題的結束:

import sys, urllib, re 

def getWebpage(url): 
    print '[*] getWebpage()' 
    url_file = urllib.urlopen(url) 
    page = url_file.read() 
    return page 

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(): 
    site = 'http://www.bbc.co.uk' 
    page = getWebpage(site) 
    print_links(page) 

if __name__ == '__main__': 
    main() 

然後你可以繼續修復你的正則表達式。

雖然我們的話題,不過,我有兩個材料建議: