Объект 'WSGIRequest' не имеет атрибута 'Session' в django - PullRequest
0 голосов
/ 15 апреля 2019

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

Объект 'WSGIRequest' не имеет атрибута 'Session'

Internal Server Error: /scrape/
Traceback (most recent call last):
  File "C:\Users\adity\Desktop\django-scrapper\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\adity\Desktop\django-scrapper\env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\adity\Desktop\django-scrapper\env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\adity\Desktop\django-scrapper\src\news\views.py", line 20, in scrape
    session = requests.Session()
AttributeError: 'WSGIRequest' object has no attribute 'Session'

Вот этот код

from django.shortcuts import render, redirect

# Create your views here.
import requests
import os
import shutil

requests.packages.urllib3.disable_warnings()

from bs4 import BeautifulSoup
from datetime import timedelta, timezone, datetime
from .models import Headline, UserProfile

def scrape(requests):
    user_p = UserProfile.objects.filter(user=requests.user).first()
    if user_p is not None:
        user_p.last_scrape = datetime.now(timezone.utc)
        user_p.save()

    session = requests.Session()
    session.headers = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

    url = 'https://www.theonion.com/'

    content = session.get(url, verify=False).content

    soup = BeautifulSoup(content, "html.parser")
    posts = soup.find_all('div', {'class': 'curation-module__item'})  #returns list

    for i in posts:
        link = i.find_all('a', {'class': 'js_curation-click'})[1]
        title = i.find_all('a', {'class': 'js_curation-click'})[1].text
        image_source = i.find('img', {'class':'featured-image' })['data-src']

        media_root = '/c/Users/adity/Desktop/django-scrapper/media_root'
        if not image_source.startswith(("data:image", "javascript")):
            local_filename = image_source.split('/')[-1].split("?")[0]
            r = session.get(image_source, stream=True, verify=False)
            with open(local_filename, 'wb') as f:
                for chunk in r.iter_content(chunk_size=1024):
                    f.write(chunk)

            current_image_absolute_path = os.path.abspath(local_filename)
            shutil.move(current_image_absolute_path, media_root)


        # end of stackoverflow

        new_headline = Headline()
        new_headline.title = title
        new_headline.url = link
        new_headline.image = local_filename
        new_headline.save()
    return redirect('/')

1 Ответ

2 голосов
/ 15 апреля 2019

Вы назвали первый аргумент вашего scrape представления requests, который скрывает импорт библиотеки requests.

Вы можете это исправить, но изменив аргумент на request, как это принято:

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