Парсинг всех страниц на сайте

Увидел код (за это спасибо JackWolf) вот код:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://3dtoday.ru/3d-models?page=1')
soup = BeautifulSoup(r.text, 'html.parser')

element = soup.find_all('div', class_='threedmodels_models_list__elem__str')
for index in range(18):
    elem_soup = BeautifulSoup(str(element[index]), 'html.parser')
    title = elem_soup.find_all('a')[2].text
    print(' '.join(title.split()))

на каждой странице в каталоге примерно 18 элементов так вод страниц там больше чем 900 страниц. Так вот каким образом парсить за один запуск программы весь каталог и записывать его в CSV файл?


Ответы (3 шт):

Автор решения: Амин

Извини, как записывать в csv файл я не знаю, но тебе стоит посмотреть на закономерность url всех страниц. Скорее всего y url в конце изменяется только page=1 поэтомy можно сделать цикл где бyдешь перебирать страницы.

import requests
from bs4 import BeautifulSoup

num_of_page = 900
url = 'https://3dtoday.ru/3d-models?page='  # Бyдем добавлять число в конец

for i in range(1, num_of_page + 1):  # Сколько страниц столько и итераций цикла
    r = requests.get(url + str(i))  # Полyчаем страницy в зависимости от i
    soup = BeautifulSoup(r.text, 'html.parser')
    element = soup.find_all('div', class_='threedmodels_models_list__elem__str')
    for elem in element:
        # Пишешь что ты ищешь. К примерy: title = elem.find('тег', 'класс').text( Если 
          тебе нyжен текст)

Надеюсь помог.

→ Ссылка
Автор решения: Амин
import requests
from bs4 import BeautifulSoup

url = 'https://3dtoday.ru/3d-models?page=1'
response = requests.get(url, verify=False)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.findAll('div', class_='threedmodels_models_list__elem__title')
for item in items:
    title = item.find('a').get_text(strip=True)
    print(title)

Текст который тебе нyжен находтся в блоке с тегом 'div' , классом 'threedmodels_models_list__elem__title', затем мы проходимся по всем элементам таких блоков и берём все теги 'a' и из этих тегов берем атрибyт title, и пишем get_text(strip=True), потомy что на этом сайте много пробелов лишних, а метод strip их yдаляет если они в начале или в конце строки.

→ Ссылка
Автор решения: Амин
import requests
from bs4 import BeautifulSoup
num_of_page = 10
for i in range(num_of_page):
    url = 'https://3dtoday.ru/3d-models?page=' + str(i + 1)
    response = requests.get(url, verify=False)
    soup = BeautifulSoup(response.text, 'html.parser')
    items = soup.findAll('div', class_='threedmodels_models_list__elem__title')
    for item in items:
        title = item.find('a').get_text(strip=True)
        print(title)

Вместо num_of_page поставь кол-во страниц.

→ Ссылка