【问题标题】:How to send scraped data into postgresql database如何将抓取的数据发送到 postgresql 数据库
【发布时间】:2020-06-14 04:36:44
【问题描述】:

我的 Django 项目中有一个 python 文件,它从网站上抓取 10 个名称。 我想将这 10 个名字存储在一个 postgresql 数据库中。

下面是python文件。

import requests
import urllib3
from bs4 import BeautifulSoup
import psycopg2


urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
session = requests.Session()
session.headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}
url = 'https://www.smitegame.com/'
content = session.get(url, verify=False).content
soup = BeautifulSoup(content, "html.parser")
allgods = soup.find_all('div', {'class': 'god'})

allitem = []

for god in allgods:
    godName = god.find('p')
    godFoto = god.find('img').get('src')
    allitem.append((godName, godFoto))
    print(godName.text)

我需要如何解决这个问题,我在 models.py 中创建了一个名为 GodList 的类。但是一旦我尝试导入它,我就无法再运行抓取脚本了。

我是不是搞错了?

我有连接到 Django 的 postgresql 数据库并且它可以工作。我可以添加模型,我看到它已保存在数据库中。

【问题讨论】:

    标签: python django database postgresql beautifulsoup


    【解决方案1】:

    Django 是专为构建 Web 应用程序而设计的框架。所以这意味着当网络浏览器向服务器发送请求时,服务器处理请求并产生具有足够数据的响应,数据被发送并显示在浏览器中。这也意味着在 Django 中完成的大部分处理都发生在请求上下文中,而应用程序正在运行。

    现在,如果 Django 没有运行并且您尝试使用它的脚本,它会崩溃,因为它没有加载其配置。所以你真正想做的是在 Django 之外使用 Django 数据库层。为此,您需要在使用模型之前加载设置并设置 Django。

    这里已经回答了如何在 Django 之外使用 Django ORM 的问题 Using Django database layer outside of Django? 和这里 How to use Django models outside of Django?

    为了使您的代码正常工作,如果我们假设我们有应用程序“football”和一个名为“list”的应用程序,其模型模块中的模型为“Player”,并且您的脚本位于管理文件夹中。 py。您的代码可能如下所示:

    import requests
    import urllib3
    from bs4 import BeautifulSoup
    import os
    import django
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'football.settings'
    django.setup()
    
    from list.models import Player
    
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    session = requests.Session()
    session.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}
    url = 'https://www.smitegame.com/'
    content = session.get(url, verify=False).content
    soup = BeautifulSoup(content, 'html.parser')
    allgods = soup.find_all('div', {'class': 'god'})
    
    allitem = []
    
    for god in allgods:
        godName = god.find('p')
        godFoto = god.find('img').get('src')
        allitem.append((godName, godFoto))
        Player.objects.create(name=godName.text)
    

    现在添加的那段代码告诉 Django 它的设置模块在哪里,然后导入模型。

    当你使用 Django 时,你必须告诉它你正在使用哪些设置。通过使用环境变量来做到这一点,

    查看文档 https://docs.djangoproject.com/en/3.0/topics/settings/#designating-the-settings

    【讨论】:

    • 我花了一段时间才弄清楚参数名称必须是我的模型中的名称,但之后它就起作用了!我可以在 pg admin 中看到一些东西保存在数据库中。下一步是查看和/或将其发送到我的前端。但你完美地回答了我的问题!
    猜你喜欢
    • 2023-03-29
    • 2022-11-27
    • 2019-02-23
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多