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')
```