Как я могу сохранить все записанные данные по одному в базу данных - PullRequest
0 голосов
/ 07 апреля 2019

Я написал скрипт в py-файле для удаления данных с веб-сайта https://www.dataquest.io/blog/ (только для целей обучения), который работает отлично. Утилизация всех данных, как я хочу.

Я представляю этот файл скрипта в приложении Django как ScrapperApp. Я хочу сохранить все очищенные данные в базе данных.

После запуска сервера и выполнения скрипта. Веб-страница просто загружается как есть. Но база данных показывает только один экземпляр данных с веб-сайта.

scrape.py

from bs4 import BeautifulSoup
import requests

src = 'https://www.dataquest.io/blog/'

source = requests.get(src).text
soup = BeautifulSoup(source, 'lxml')

total = 0
for article in soup.find('section', class_='bSe right').find_all('article'):
     try:
          headline = article.find('h2', class_='entry-title').text
          print('Heading : ', headline)

          summary = article.find('p').text
          print('Summary: ',summary)

          category = article.find('div', class_='category').find('span').text
          print(category)

          blog_link = article.find('div', class_='awr').find('a', class_='psb')['href']
          print(blog_link)
          total += 1
     except exception as e:
          pass

     print()


print(total)

models.py

from django.db import models

class BlogCards(models.Model):
    headline = models.CharField(max_length=500, blank=True)
    category = models.CharField(max_length=300, blank=True)
    summary = models.TextField(blank=True)
    link = models.URLField(blank=True)
    total_blogs = models.IntegerField()

    def __str__(self):
        return self.headline

views.py из Django ScrapperApp

from django.shortcuts import render
from bs4 import BeautifulSoup
import requests
from .models import BlogCards
import logging


def ScrapperView(request):
    src = 'https://www.dataquest.io/blog/'

    source = requests.get(src).text
    soup = BeautifulSoup(source, 'lxml')

    total_blogs = 0

    for article in soup.find('section', class_='bSe right').find_all('article'):
        blog_card = BlogCards()

        headline = article.find('h2', class_='entry-title').text
        blog_card.headline = headline

        summary = article.find('p').text
        blog_card.summary = summary

        category = article.find('div', class_='category').find('span').text
        blog_card.category = category

        blog_link = article.find('div', class_='awr').find('a', class_='psb')['href']
        blog_card.link = blog_link

        total_blogs += 1
        blog_card.total_blogs = total_blogs
    logging.basicConfig(filename='blogcards.log', level=logging.INFO)


        blog_card.save()

    return render(request, 'scrapper/scrapper.html')

База данных, показывающая единственный экземпляр сохраненных очищенных данных как заголовок, категория, резюме и ссылка только первого блога. Отдых не сохраняется в базе данных.

Я ожидаю, что выходные данные будут иметь все данные в базе данных. Я знаю, что что-то упустил, так как я новичок в Django. Я не могу это настроить.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...