Double Eleven уже здесь. Как найти информацию о ценах на нужные вам товары на платформе и добиться быстрого сравнения цен? Для этого используются полученные нами знания сканеров. Эта статья в основном посвящена получению цен на продукты JD. Код, использованный в статье, используется только для обучения и демонстрации функций сканера.
Обычно мы вводим продукт, который хотим найти, на домашней странице JD и нажимаем «Поиск», чтобы отобразить список и информацию о цене искомого продукта.
Как показано выше,Мы можем видеть в URL,будет одинpvidПараметры,Это должно произойти при инициировании поискового запроса.,js генерируется путем шифрования файла cookie пользователя и других параметров. Если мы вставим этот URL в другой браузер,Вы обнаружите, что цена на самом деле зашифрована.
так,этотpvidВсе еще распознавать браузер。для Сдавайсярептилия在访问时能够模拟этотjsзапросить действие,Первое, что нужно решить, это проблема с pvid,Также существует проблема со входом в систему. Если сипользоватькод все реализовано,будет очень хлопотно,Я просто случайно написал последнюю статьюseleniumЗамечательное использование селена в сканерах и автоматизированном тестировании,Давайте воспользуемся возможностью попрактиковаться здесь.
Первый — установить селен, а затем загрузить драйвер Chrome в код. Поскольку Chrome уже установлен на моем ноутбуке, я могу использовать его напрямую. В противном случае мне нужно загрузить и установить драйвер.
Функция кода в основном разделена на три части:
Затем используйте селен для реализации трех вышеуказанных функций.
использоватьwebdriver.ChromeЗагрузите и начнитеchrome。
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
}
# Установить заголовок запроса
chrome_options.add_argument(f"user-agent={headers['User-Agent']}")
# Запустить браузер
driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)
Информация заголовка запроса добавляется сюда с помощью параметров. Вы также не можете добавить ее сюда, потому что selenium — это запускаемый браузер, и вся эта информация UA доступна. Следующим шагом является реализация ввода содержимого поля поиска.
# Открыть домашнюю страницу JD
driver.get("https://www.jd.com/")
time.sleep(2)
# Найдите поле поиска и введите ключевые слова
search_box = driver.find_element(By.ID, "key") # окно поиска ID для 'key'
# Очистить содержимое по умолчанию
search_box.clear()
search_box.send_keys("ноутбук")
# Нажмите клавишу Enter, чтобы выполнить поиск
search_box.send_keys(Keys.RETURN)
# Подождите, пока загрузятся результаты поиска
time.sleep(3)
в селене,проходитьfind_elementнайти элемент,Идентификатор элемента можно узнать с помощью F12.
использоватьsend_keysчтобы ввести текст и нажать Enter,Эффект от запуска программы следующий:
Это реализует функцию поиска на странице.
После ввода приведенного выше содержимого поиска появляется страница входа пользователя. Она остается такой же, как и раньше. Найдя поле ввода имени пользователя и пароля, введите пароль учетной записи JD, а затем нажмите, чтобы войти.
sername_box = driver.find_element(By.ID, "loginname")
username_box.clear()
username_box.send_keys("18******")
# Введите пароль
password_box = driver.find_element(By.ID, "nloginpwd")
password_box.clear()
password_box.send_keys("1*****")
# Нажмите кнопку входа
login_button = driver.find_element(By.ID, "loginsubmit")
login_button.click()
Эффект следующий, но после нажатия на вход всплывает скользящий пазл. Это должно уметь скользить какими-то техническими средствами, но здесь я реализовал это вручную.
Однако при последующих входах в систему иногда вход в систему не активируется, поэтому цена по-прежнему зашифрована, поэтому вы можете напрямую получить доступ к странице входа спереди, а затем выполнить поиск после успешного входа в систему.
driver.get("https://passport.jd.com/new/login.aspx")
username_box = driver.find_element(By.ID, "loginname")
username_box.clear()
username_box.send_keys("18354141658")
password_box = driver.find_element(By.ID, "nloginpwd")
password_box.clear()
password_box.send_keys("1qaz@WSX")
login_button = driver.find_element(By.ID, "loginsubmit")
login_button.click()
time.sleep(20)
В конце вам придется поспать. Здесь 20 секунд — это время, которое осталось для перемещения ползунка или ввода кода подтверждения мобильного телефона. После входа в систему это обычное окно браузера. Вы можете выполнять такие операции, как повторный поиск и просмотр цены в коде перед закрытием.
После входа на страницу вы можете проанализировать структуру веб-страницы с ценами на продукты и получить цену путем позиционирования элементов.
Вы можете использовать отладку по точкам останова для анализа данных веб-страницы. На одной странице содержится 30 продуктов, поэтому анализируется 30 данных о ценах.
Магазины также могут быть проанализированы. Один продукт соответствует одному магазину, всего 30 сведений о магазине.
Затем проанализируйте информацию об описании продукта, поскольку часть ее содержимого находится под тегом em, а часть — под тегом шрифта.
Поэтому, если вы используете описанный выше метод анализа, будет более 30 строк данных и много новых строк.
Итак, идея этой части состоит в том, чтобы сначала проанализировать тег a, чтобы было 30 сведений о продукте.
Затем пройдите по тегу a, объедините весь текст ниже и удалите символы новой строки.
Таким образом получается информация о цене, магазине и описании продукта. Код выглядит следующим образом:
page_source = driver.page_source
# использовать Scrapy Selector Извлечь цену
selector = Selector(text=page_source)
prices = selector.css('div.p-price strong i::text').extract()
shops = selector.css('div.p-shop span a::text').extract()
infos = selector.css('div.p-name a')
infos_ = []
for info in infos:
infos_.append(''.join(info.css('em ::text').extract()))
for price, shop, info in zip(prices, shops, infos_):
print(price, shop, info)
Запустите код и выведите результат:
Вот как можно получить цену на продукты JD с использованием селена. Также можно видеть, что селен может вводить текст и имитировать клики пользователя, что очень удобно для входа в систему. Процедура может использовать селен для перелистывания страниц и получения дополнительной информации о продукте.