Вопрос или проблема
Я хотел бы скачать информацию, доступную для публикации по адресу
https://www.etsy.com/search?q=tablet+wax&page=1
для каждого продукта, указанного там.
(Например, если я посещу эту страницу, которая может или не может появиться в вашем поиске, но это не суть
https://www.etsy.com/listing/1729101636/candle-making-kit-200-ml-candle-kit-diy?sts=1
, то я хочу извлечь текст “о данном товаре” и то, что появляется сразу под ценой
“Набор для изготовления свечей 200 мл, Набор свечей, DIY набор для свечей, Набор для изготовления свечей, Соевый воск для свечей, Домашние свечи, сделай сам свою свечу”.
Я хочу сделать это для каждого продукта, который появляется по ссылке, которую я опубликовал в начале.
).
У меня был скрипт, который работал, но теперь я вижу следующее, когда начинаю.
read_html( "https://www.etsy.com/search?q=tablet+wax&page=1")
Ошибка в open.connection(x, "rb") : HTTP ошибка 403.
Я попробовал что-то с RSelenium и Chromote, но далеко не ушёл. Любое рабочее предложение/решение будет очень признательно!
Ответ или решение
Для начала обратим внимание на проблему, с которой вы столкнулись при попытке получить доступ к содержимому на сайте Etsy. Ошибка 403 указывает на то, что доступ к ресурсу запрещён. Это может происходить по нескольким причинам, включая ограничения со стороны веб-сайта на автоматизированные запросы.
1. Постарайтесь понять причины возникновения ошибки 403:
- Блокировка по IP-адресу: Сайты, такие как Etsy, могут активно блокировать IP-адреса, с которых поступает слишком много запросов.
- Проверка User-Agent: Серверы могут проверять заголовки запросов, включая User-Agent, чтобы определить, является ли запрос обычным (например, из браузера) или автоматизированным.
- Использование фильтров и капчи: Многие сайты используют защитные механизмы, такие как капчи, чтобы предотвратить автоматизированный сбор данных.
2. Как обойти ошибку 403:
Использование библиотеки httr
с изменением заголовков запроса:
Вы можете попробовать модифицировать свой скрипт, чтобы он имел вид, более похожий на обычный браузерский запрос. Попробуйте следующий код на R с использованием библиотеки httr
:
library(httr)
url <- "https://www.etsy.com/search?q=tablet+wax&page=1"
# Укажите пользовательский User-Agent, чтобы имитировать браузер
response <- GET(url, add_headers("User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"))
# Проверьте статус ответа
if (status_code(response) == 200) {
content <- content(response, as="text")
print(content) # Дальнейшая обработка контента
} else {
print(paste("Ошибка:", status_code(response)))
}
3. Использование RSelenium
для автоматизации работы:
Если изменение заголовков не сработает, предлагаю использовать RSelenium
, чтобы имитировать действия пользователя в браузере. Это поможет избежать блокировок:
library(RSelenium)
# Запуск сервера Selenium
rD <- rsDriver(browser = "chrome", port = 4840L, verbose = FALSE)
remDr <- rD[["client"]]
# Переход к страницам Etsy
remDr$navigate("https://www.etsy.com/search?q=tablet+wax&page=1")
# Получение HTML кода страницы
page_source <- remDr$getPageSource()[[1]]
# Закрыть браузер
remDr$close()
rD[["server"]]$stop()
# Теперь можно анализировать page_source с помощью rvest или подобной библиотеки
4. Сбор данных о каждом продукте:
Используйте библиотеку rvest
, чтобы вытащить нужные вам данные из HTML-кода:
library(rvest)
# Здесь необходимо вставить ваш HTML-код
product_page <- read_html(page_source)
# Предполагая, что у вас есть ссылки на продукты, можно получить информацию
item_description <- product_page %>%
html_nodes(".about-this-item-css-selector") %>% # замените на актуальный CSS-селектор
html_text()
item_keywords <- product_page %>%
html_nodes(".keywords-css-selector") %>% # замените на актуальный CSS-селектор
html_text()
# Сохраните ваши данные
data <- data.frame(description = item_description, keywords = item_keywords)
write.csv(data, "etsy_products.csv", row.names = FALSE)
Заключение:
Используя вышеописанные методы, вы можете успешно обойти ошибку 403 и автоматизировать процесс сбора информации с Etsy. Обязательно учитывайте правила использования сайтов и постарайтесь не перегружать сервер ненужными запросами. Для достижения наилучших результатов старайтесь поддерживать умеренную частоту запросов и соблюдать все нормативные требования к автоматизированному доступу.