Парсинг всех страниц на сайте
Увидел код (за это спасибо 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 поставь кол-во страниц.