2015-04-19 26 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]