显示网页中的所有链接

时间:2016-11-25 10:51:45

标签: python django python-2.7

这是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:

2 个答案:

答案 0 :(得分: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 :(得分:1)

您的结果只包含最后一个链接。将其添加到循环中的列表中,然后将列表发送到模板。

现在你的结果只有最后一个链接。

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})

这会有效.. 你的列表(list1)看起来像这样。 [ 'www.google.com', 'www.new.com', '....', '....']

在模板中,您可以循环结果变量以打印每个链接。(。html文件)

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