如何使用django打印html文件上给定URL的所有链接

时间:2012-04-12 15:49:42

标签: python django django-templates beautifulsoup

我在views.py中有这段代码:

from django.http import HttpResponse, Http404
from django.shortcuts import render_to_response

from bs4 import BeautifulSoup
import urllib

def extract_links(request):
    starting_link = urllib.urlopen("http://www.finalyearondesk.com")
    soup = BeautifulSoup(starting_link)
    all_links = soup.findAll('a', href = True)          
    return render_to_response('extracted_links.html',{'all_links': all_links })

在此,我使用BeautifulSoup。 我正在模板文件中编写此代码:extracted_links.html:

{% for final_links in all_links %}
    {{ final_links['href'] }}    # {{ final_links.href }} did not print anything
{% endfor %}

但问题是它显示错误:

Could not parse the remainder: '['href']' from 'final_links['href']'

有任何建议如何解决这个问题?如果我在一个简单的python文件上使用这个函数,它可以正常工作,但不能在django模板上

2 个答案:

答案 0 :(得分:1)

如果all_linksdict列表,每个href都有密钥href,请执行以下操作以访问Django模板中{% for final_links in all_links %} {{ final_links.href }} {% endfor %} 的值:

{{1}}

答案 1 :(得分:1)

尝试:

{% for final_links in all_links %}
   {{ final_links.attrMap.href }}
{% endfor %}

我从下一次会议到达了那个:

>>> import urllib
>>> from BeautifulSoup import BeautifulSoup as BS
>>> start = urllib.urlopen('http://blog.tkbe.org')
>>> soup = BS(start)
>>> all_links = soup.findAll('a', href=True)
>>> first = all_links[0]
>>> first
<a href="http://blog.tkbe.org/" title="TKBE" rel="home">TKBE</a>
>>> dir(first)
[..., 'attrMap', 'attrs', ...]
>>> first.attrs
[(u'href', u'http://blog.tkbe.org/'), (u'title', u'TKBE'), (u'rel', u'home')]
>>> first.attrMap
{u'href': u'http://blog.tkbe.org/', u'rel': u'home', u'title': u'TKBE'}

如果您的BeautifulSoup版本具有其他属性,您可以类似地找到它们。

您可能必须在视图中提取它们,而不是在模板中提取它们,例如:

all_links = [link.attrMap['href'] for link in all_links]
返回语句之前的

(或您在BeautifulSoup版本中需要访问的任何属性)。