Я пытаюсь собрать некоторые метаданные в отчетах по анализу рынка в Исследования БЦК. У них есть данные о различных темы, таких как передовые материалы, биотехнологии и т. д.
Если вы переходите к теме, скажем, Современные материалы, отчеты распределяются по нескольким навигационным страницам внизу.
Когда я нажимаю, скажем, на навигационную страницу, скажем, номер 2, страница «обновляется» путем прокрутки вверх. Это, естественно, загружает больше результатов на экран. Теперь проблема в том, что когда я проверяю ссылку с помощью href (например, https://www.bccresearch.com/market-research/advanced-materials/page/2) страницы навигации, она возвращает меня на главную страницу темы вместо второй страницы.
Мне было интересно, может ли кто-нибудь помочь мне.
Обновлено: Скриншоты источника навигационной страницы до и после того, как я нажму ссылку на навигационную страницу. ДоПосле
@LoganPhillips Я добавил в пост изображение до и после. Пожалуйста, обратитесь к ним и спасибо за помощь.
Пожалуйста, включите свой код в вопрос. минимальный воспроизводимый пример
Страница использует POST-запросы для обновления содержимого страницы, а не для перехода
Ссылки для отправки запросов имеют формат:
https://www.bccresearch.com/default/index/category/page/3/cod/advanced-materials/rnge/25
где есть номер страницы, например. 3 и результаты на номер страницы, например. 25.
Это не URL-адреса, которые вы можете посетить в своем браузере.
Когда вы нажимаете на значки навигации, выполняется запрос POST для значка навигации, класс которого стал active
.
Если вы используете такой метод, как селен, вы можете автоматизировать нажатие этих ссылок, которые будут генерировать запросы POST, и вы сможете очищать содержимое от обновленной страницы.
С селеном вы можете установить количество результатов до 100 на страницу. Рассчитайте количество страниц, разделив общее количество результатов на количество страниц результатов (и округлив в большую сторону). Затем щелкните следующий шеврон, чтобы просмотреть все страницы.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
import math
import time
url = 'https://www.bccresearch.com/market-research/advanced-materials'
driver = webdriver.Chrome()
driver.get(url)
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "a")))
#switch to 100 results per page
driver.find_element_by_css_selector('.itperpg:last-child').click()
#calculate number of pages
results_count = int(re.search('(\d+)',driver.find_element_by_css_selector('#publishedrpt h1').text).group())
results_per_page = 100
num_pages = math.ceil(results_count / results_per_page)
print(num_pages)
#click next button through all pages
for page in range(num_pages):
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[aria-label=Next]"))).click()
time.sleep(3) #replace this with better condition based wait
#do something with page
Это исправляет это. Спасибо за подробный ответ!
В качестве продолжения мне было интересно, можно ли сделать то же самое с помощью Запросы.
завтра посмотрю. Вы пытались использовать инструменты разработчика для проверки POST xhrs?
Когда я нажимаю на другую страницу, URL-адрес для меня не меняется. Откуда вы знаете, что bccresearch.com/market-research/advanced-materials/page/2 является допустимым URL? Откуда это?