Python / Django提取并仅附加新链接

时间:2013-12-30 23:22:20

标签: python django

我在Windows 7上使用Python 2.7 Django 1.5组建了一个项目。 我有以下观点:

views.py:

def foo():
    site = "http://www.foo.com/portal/jobs"
    hdr = {'User-Agent' : 'Mozilla/5.0'}
    req = urllib2.Request(site, headers=hdr)
    jobpass = urllib2.urlopen(req)
    soup = BeautifulSoup(jobpass)
    for tag in soup.find_all('a', href = True):
        tag['href'] = urlparse.urljoin('http://www.businessghana.com/portal/',  tag['href'])
    return map(str, soup.find_all('a', href = re.compile('.getJobInfo')))

def example():
    site = "http://example.com"
    hdr = {'User-Agent' : 'Mozilla/5.0'}
    req = urllib2.Request(site, headers=hdr)
    jobpass = urllib2.urlopen(req)
    soup = BeautifulSoup(jobpass)
    return map(str, soup.find_all('a', href = re.compile('.display-job')))

 foo_links = foo()
 example_links = example()

def all_links():
    return (foo_links + example_links)

def display_links(request):
    name = all_links()
    paginator = Paginator(name, 25)
    page = request.GET.get('page')
    try:
        name = paginator.page(page)
    except PageNotAnInteger:
        name = paginator.page(1)
    except EmptyPage:
        name = paginator.page(paginator.num_pages)

    return render_to_response('jobs.html', {'name' : name})    

我的模板如下所示:

<ol>
{% for link in name %}
  <li> {{ link|safe }}</li>
{% endfor %}
 </ol>
 <div class="pagination">
<span class= "step-links">
    {% if name.has_previous %}
        <a href="?page={{ names.previous_page_number }}">Previous</a>
    {% endif %}

    <span class = "current">
        Page {{ name.number }} of {{ name.paginator.num_pages}}.
    </span>

    {% if name.has_next %}
        <a href="?page={{ name.next_page_number}}">next</a>
    {% endif %}
</span>
 </div>

现在,正如我的代码所示,无论何时我运行它,它都会废弃所选网站首页上的所有链接,并将它们分页全部重新。 然而, 我不认为脚本读取/写入之前已经重新提取链接的所有链接是一个好主意,因此想要检查并仅附加新链接。我想保存以前删除的链接,以便在一周的时间内,这些网站首页上显示的所有链接都将在我的网站上显示为旧页面。

这是我的第一个编程项目,不知道如何将这个逻辑合并到我的代码中。

更新:

我的模型看起来像这样:

from django.db import models

class jobLinks(models.Model):
    links = models.URLField()
    pub_date = models.DateTimeField('date retrieved')

    def __unicode__(self):
        return self.links

非常感谢任何帮助/指针/参考。

的问候, 最大

1 个答案:

答案 0 :(得分:1)

我建议构建URL表并在表中使用日期字段进行排序,以便首先列出您最近的URL,因为您描述了您尝试使用分页。您的URL表可能如下所示:

models.py:

class URL_Table(models.Model):
  date = models.DateField(auto_add_now=True)
  url = models.URLField()

您可以按日期降序排序,并将其与views.py中的观点相关联:

urls = URL_Table.objects.order_by('-date')

然后,您可以引用此表以查看该URL是否已存在。如果是新URL,则将其保存到表中。

你也可以在get()视图功能中覆盖views.py以在页面加载时执行某些操作,或者构建custom model method,如果URL更多,则仅执行某种URL维护使用python

中的django.utils.timezonedatetime.datetime而不是一周

<强>更新

如果您要检查已保存到表格中的链接,并且仅保存新链接,请调用所有链接并检查新链接。您可以选择仅使用timedelta显示上周创建的链接。所以我建议在这里使用两个函数。

使用此功能检查新链接,并仅保存新链接:

def save_new_links(all_links):
  current_links = joblink.objects.all()
  for i in all_links:
    if i not in current_links:
      joblink.objects.create(url=i)

然后使用timedelta

调用上周的所有链接
def this_weeks_links(all_links):
  return joblinks.objects.filter(date__gte=datetime.timedelta(days=-7))

然后将这些功能插入您的视图中#1 仅保存新链接,#2 仅显示在您上周保存的首页链接上。< / p> 祝你好运!