2015-04-19 25 views
1

我的代碼:Python:從列表解析只打印最後一項,不是全部?

from urllib2 import urlopen 
from bs4 import BeautifulSoup 

url = "https://realpython.com/practice/profiles.html" 

html_page = urlopen(url) 
html_text = html_page.read() 

soup = BeautifulSoup(html_text) 

links = soup.find_all('a', href = True) 

files = [] 
base = "https://realpython.com/practice/" 


def page_names(): 
    for a in links: 
     files.append(base + a['href']) 

page_names() 

for i in files: 
    all_page = urlopen(i) 

all_text = all_page.read() 
all_soup = BeautifulSoup(all_text) 
print all_soup 

解析上半年收集三通,下半年應該打印出所有的HTML代碼。

不幸的是,它只打印最後一個鏈接的HTML。

可能因爲

for i in files: 
    all_page = urlopen(i) 

它與8行代碼以前的工作文件中的服務爲我:目的,但我想它清理乾淨,並把箱子放到這兩個。好吧,顯然不是因爲它不起作用。

雖然沒有錯誤!

回答

1

在您的for循環中,您正在分配all_page,它會在每個循環中覆蓋它,所以它只會具有最後一次迭代的值。

如果您希望它爲每個頁面打印all_soup,您可以將這3行縮進到for循環中,然後每次都通過循環執行它們。

1

這似乎是一個格式問題,你可能打算在循環中打印它,對吧?

for i in files: 
    all_page = urlopen(i) 
    all_text = all_page.read() 
    all_soup = BeautifulSoup(all_text) 
    print all_soup 
3

你只存儲在循環的最後一個值,你需要將所有的分配和循環內的打印:

for i in files: 
    all_page = urlopen(i) 
    all_text = all_page.read() 
    all_soup = BeautifulSoup(all_text) 
    print all_soup 

如果你要使用的功能我想傳遞參數和創建列表,否則你可能會得到意想不到的輸出:

def page_names(b,lnks): 
    files = [] 
    for a in lnks: 
     files.append(b + a['href']) 
    return files 


for i in page_names(base,links): 
    all_page = urlopen(i) 
    all_text = all_page.read() 
    all_soup = BeautifulSoup(all_text) 
    print all_s 

你的功能,然後返回一個列表理解:

def page_names(b,lnks): 
    return [b + a['href'] for a in lnks]