Здесь вы можете найти корневой элемент вашей таблицы / сетки, который равен id=product-list-grid
, и извлечь атрибуты, в которых содержится вся необходимая информация (бренд, ссылка, категория) и первый тег <img>
.
Для разбивки на страницы, кажется, вы можете перейти на следующую страницу, добавив p=<page number>
, а когда страница не существует, она перенаправляет на первую. Обходной путь здесь состоит в том, чтобы проверить URL-адрес ответа и проверить, совпадает ли он с тем, который вы запрашивали. Если это то же самое, вы можете увеличить номер страницы, в противном случае вы удалили все страницы
from bs4 import BeautifulSoup
import urllib.request
count = 1
url = "https://www.sociolla.com/142-nails?p=%d"
def get_url(url):
req = urllib.request.Request(url)
return urllib.request.urlopen(req)
expected_url = url % count
response = get_url(expected_url)
results = []
while (response.url == expected_url):
print("GET {0}".format(expected_url))
soup = BeautifulSoup(response.read(), "html.parser")
products = soup.find("div", attrs = {"id" : "product-list-grid"})
results.append([
(
t["data-eec-brand"], #brand
t["data-eec-category"], #category
t["data-eec-href"], #product link
t["data-eec-name"], #product name
t["data-eec-price"], #price
t.find("img")["src"] #image link
)
for t in products.find_all("div", attrs = {"class" : "product-item"})
if t
])
count += 1
expected_url = url % count
response = get_url(expected_url)
print(results)
Здесь результаты хранятся в results
, который является массивом кортежей