Как исправить ошибку 'NoneType' object has no attribute 'select'?

Каким образом можно улучшить формулировку вопроса?
  • 28 сентября 2023 г. 11:58
Ответы на вопрос 2
Для исправления ошибки 'NoneType' object has no attribute 'select' нужно проверить, откуда приходит значение None, и убедиться, что это значение не передается в функцию select(). Возможно, указанный объект не инициализирован, или неверно передается в функцию.

Чтобы улучшить формулировку вопроса, можно добавить дополнительную информацию, например:

- Опишите шаги, которые вы выполнили перед возникновением ошибки.
- Укажите, какую конкретную функцию вы вызываете и где именно происходит ошибка.
- Предоставьте код или выделите особенности синтаксической конструкции, где возникла ошибка.
- Уточните, какая версия используется для языка программирования или библиотеки.
 
Например:
- При использовании библиотеки BeautifulSoup возникает ошибка 'NoneType' object has no attribute 'select'. Я пытаюсь извлечь элементы с помощью функции select(), но полученный объект является типом None. Как исправить эту ошибку и получить ожидаемые результаты? Вот мой код: [вставьте свой код здесь].
1. Исправил ошибку, связанную с непоказыванием парсера после кода. 
   Код:
   ```
   import requests
   from bs4 import BeautifulSoup
   import re
   import os
   from urllib.request import urlopen
   import json
   from urllib.parse import unquote
   import asposecells
   import jpype
   from openpyxl import Workbook
   import pandas as pd
   import mysql.connector
   from seleniumwire import webdriver 
   import warnings
   warnings.filterwarnings("ignore")
   import time
   import cloudscraper
   from selenium import webdriver

   url = 'https://гранты.рф/data/grants/list'
   OUT_FILENAME = 'out.json'
   options = webdriver.EdgeOptions()
   options.add_argument("--headless")
   driver = webdriver.Edge(options=options)
   driver.get(url)
   time.sleep(1.5)
   html_parsed = driver.page_source
   urls = []
   soup = BeautifulSoup(html_parsed, 'html.parser')
   ```

2. Написал функцию `get_soup()`, которая получает объект "soup" для указанного URL-адреса.
   Код:
   ```
   def get_soup(url, **kwargs):
       response = requests.get(url, **kwargs, verify=False)
       if response.status_code == 200:
           soup = BeautifulSoup(response.text, features='html.parser')
       else:
           soup = None
       return soup
   ```

3. Написал функцию `crawl_products()`, которая извлекает ссылки на продукты со страницы и добавляет их в список `urls`.
   Код:
   ```
   def crawl_products(url):
       for tag in soup.select('.competition-card-wrapper'):
           t = tag.attrs['href']
           url = 'https://гранты.рф{}'.format(t)
           urls.append(url)
           print(urls)
       return urls
   ```

4. Написал функцию `parse_products()`, которая парсит данные продуктов со страниц и добавляет их в список `data`.
   Код:
   ```
   def parse_products(urls):
       data = []
       item = {}
       for page in urls:
           soup = get_soup(page)
           if soup is None:
               break
           for tr in soup.select(".grants-competition-page-hero__title"):
               name = tr.select_one("p").text
               item['Название'] = name
               data.append(item)
       return data
   ```

5. Написал функцию `dump_to_json()`, которая сохраняет данные в формате JSON в указанный файл.
   Код:
   ```
   def dump_to_json(filename, data, **kwargs):
       kwargs.setdefault('ensure_ascii', False)
       kwargs.setdefault('indent', 1)

       with open(OUT_FILENAME, 'w', encoding="utf-8") as f:
           json.dump(data, f, **kwargs)
   ```

6. Написал функцию `main()`, которая вызывает все необходимые функции для выполнения программы.
   Код:
   ```
   def main():
       urls = crawl_products(url)
       data = parse_products(urls)
       dump_to_json(OUT_FILENAME, data)

       with open(OUT_FILENAME, 'w', encoding="utf-8") as f:
           json.dump(data, f, ensure_ascii=False, indent=1)

   if __name__ == '__main__':
       main()
   ```

7. Прочитал данные из файла JSON в переменную `df`.
   Код:
   ```
   df = pd.read_json('./out.json')
   ```
Похожие вопросы