【问题标题】:django database update using BeautifulSoup使用 BeautifulSoup 更新 django 数据库
【发布时间】:2017-11-21 02:03:54
【问题描述】:

我对 Django 很陌生。我一直在浏览教程,并决定从我自己的东西开始,并且需要一些关于最佳前进方向的建议。

我正在创建一个简单的站点,该站点通过存储在 postgreSQL 表中的一小部分 URL 运行,并使用 Beautiful Soup 从每个 URL 页面中提取数据并将其存储在记录中。(它只是记录在每个人的主页)

我已经设置了模型和相关的类列表视图来显示它们。即将开始运行美丽的汤部分,想知道应该在哪里物理放置代码以运行并“抓取”每个站点的数据?

在调用类视图时是否应该调用它?某种模型管理器?只是一个定制的功能还是什么?如果可能的话,我想使用 Ajax 定期更新这些数据,所以它需要适应它。

希望这不是太模糊。很高兴发布我拥有的内容,如果您觉得这很有益,尽管它实际上只是一个简单的模型和类 ListView。

谢谢!

【问题讨论】:

    标签: python django django-models beautifulsoup


    【解决方案1】:

    您不应该在视图中进行任何抓取。它可能会使用户感到困惑,因为在进行抓取时页面不会加载。用户还可能刷新页面并导致您的代码运行两次。此外,您可能为项目安装的许多代理可能会超时。

    这更像是一种后台进程类型的工作。最简单的方法是使用custom admin command。在management/commands 下创建一个名为scrape.py 的文件。不要忘记__init__.py。例如:

    polls/
        __init__.py
        models.py
        management/
            __init__.py
            commands/
                __init__.py
                scrape.py
        tests.py
        views.py
    

    在该文件中使用:

    from django.core.management.base import BaseCommand, CommandError
    
    class Command(BaseCommand):
        def handle(self, *args, **options):
            self.stdout.write(self.style.SUCCESS('I am a scraper!'))
    

    最后别忘了运行你的新命令:

    python manage.py scrape
    

    您可能希望使用 cron 作业来设置它。

    有关更复杂的用例,请参阅Celery

    【讨论】:

    • 完美,我试试看。感谢您的快速响应 kichik。
    猜你喜欢
    • 2016-12-15
    • 2014-10-14
    • 2013-07-07
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2013-02-21
    相关资源
    最近更新 更多