我正在尝试收集有关BCC Research市场分析报告的一些元数据。他们有不同的topics数据,如先进材料,生物技术等。
如果你在一个主题下,比如Advanced Materials,报告会分散在底部的许多导航页面中。
当我点击说出导航页面时,说出数字2,页面通过向上滚动“刷新”。这自然会将更多结果加载到屏幕上。现在的问题是,当我使用导航页面的href(例如,https://www.bccresearch.com/market-research/advanced-materials/page/2)检查链接时,它会将我带回主题的主页面,而不是第二页面。
我想知道是否有人可以帮助我。
该页面使用POST请求更新页面内容而不是导航
发送请求的链接格式为:
https://www.bccresearch.com/default/index/category/page/3/cod/advanced-materials/rnge/25
哪里有页码,例如3和每页数的结果,例如25。
这些不是您可以在浏览器中访问的网址。
当您单击导航图标时,POST请求将针对其类已成为active
的导航图标。
如果您使用像selenium这样的方法,您可以自动点击这些链接,这些链接将生成POST请求,您可以从更新的页面中删除内容。
使用selenium,您可以将结果数设置为每页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