2016-11-25 3 views
1

ここはviews.pyです。私は 'www.pythonforbeginners.com'に含まれているすべてのリンクを表示したいのですが、問題はページの最後のリンクのみを表示することです。どうすれば解決できますか?ウェブページからのすべてのリンクを表示

from django.shortcuts import render 
from bs4 import BeautifulSoup 
import urllib2 

def home(request): 
    url = urllib2.urlopen("http://www.pythonforbeginners.com") 
    readurl = url.read() 
    soup = BeautifulSoup(readurl) 
    links = soup.find_all('a') 
    for lin in links: 
     result = lin.get('href') 

    return render(request, 'search/homepage.html', {'result': result, 'url':url}) 

そして、ここではhomepage.htmlある

{{ result }} 

And output I got:

+0

あなたは反復を行っているので、 'links'コレクションの最後の要素(プライバシーポリシー)は' result'変数に割り当てられます。そのコレクション、またはその消毒されたフォームをテンプレートファイルに適切に渡します。 – marmeladze

答えて

4

これを試してみてください。

def test(request): 
    url = urllib2.urlopen("http://www.pythonforbeginners.com") 
    readurl = url.read() 
    soup = BeautifulSoup(readurl) 
    links = soup.find_all('a') 
    result = [] 
    for lin in links: 
     result.append(lin.get('href')) 

    return render(request, 'portal_test.html', {'result': result, 'url': url}) 

あなたがやっていることは結果データを上書きすることです。リストを使用して、リスト内のすべてのデータを取得する必要があります。次に、テンプレートを使用、

{% for x in result %} 
{{ x }} 
{% endfor %} 

使用正しい変数名を中... :)

1

あなたの結果は、ループ内のリストに、それだけで最後のlink.Appendが含まれ、その後、テンプレートにリストを送ります。

あなたの結果は最後のリンクのみです。これは動作します

from django.shortcuts import render 
from bs4 import BeautifulSoup 
import urllib2 

def home(request): 
    url = urllib2.urlopen("http://www.pythonforbeginners.com") 
    readurl = url.read() 
    soup = BeautifulSoup(readurl) 
    links = soup.find_all('a') 
    list1 = [] 
    for lin in links: 
     result = lin.get('href') 
     list1.append(result) 

    return render(request, 'search/homepage.html', {'result': list1,'url':url}) 

.. あなたのリスト(リスト1)は次のようになります。 ['www.google.com'、 'www.new.com'、 '....'、 '....']

テンプレートでは、結果変数をループバックして各リンクを印刷できます。 (.htmlファイル)

関連する問題