【问题标题】:How do I automatically save my scraped data to my Database如何自动将抓取的数据保存到我的数据库中
【发布时间】:2014-01-06 18:44:19
【问题描述】:

我在 Windows 7 上使用 Django 1.5、Python 2.7。 我有以下视图,可以从各种来源中提取和显示链接。它工作正常。但我不知道该怎么做:

  1. 将数据保存到数据库并
  2. 按提取日期排序。

PS:我在这里有一个类似的问题,但看起来我还不够清楚:

Python/Django Extract and append only new links

我希望有人可以在这里帮助我。

views.py:

def foo():
    site = "http://www.example.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

这是我的第一个编程项目,无论我尝试/搜索什么,我都无法让这部分工作 任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 你应该展示你已经尝试保存到数据库的内容。上面的代码都没有使用模型。
  • 这就是我期待做的事情。我愿意'
  • @DanielRoseman 你否决了我的问题,因为我在寻求帮助?我不知道如何将我的数据保存到数据库中,这是我发布问题的唯一原因,但你投了反对票,因为我没有按照我所说的去做,我不知道该怎么做。如果您帮助我,无论是否投反对票,我将不胜感激。谢谢
  • 不知道你为什么认为是我投了反对票。不是。
  • 很抱歉做出了错误的假设。这是我剩下的唯一一段代码,我有点失去继续从事这个宠物项目的动力。请这是我在 pastebin 中的整个视图的链接。你可以看到我已经付出了足够的努力,而不仅仅是要求你给我代码来组合一个项目。请看看这个,看看你能如何帮助我..pastebin.com/0SaiRVTU。谢谢

标签: python django


【解决方案1】:

我已经很久没有使用 Python 和 Django 模板了,但这看起来像是一个典型的 MVC 相关项目。在任何情况下,您都需要连接到数据库,因此您需要安装某种与 Python 兼容的数据库模块。 MySQLdb 我相信有一个 Python 实现。然后,您需要序列化从 Web 请求返回的数据并使用某种持久性 API。我相信 pickle 模块处理 Python 持久性。持久性或多或少会保存数据。

【讨论】:

  • 好吧,无论如何,为了让 django 真正持久化,需要使用数据库连接参数填充某种配置文件。
猜你喜欢
  • 2022-11-27
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2020-10-11
  • 2016-11-24
相关资源
最近更新 更多