单击导航栏可以正常工作。但HTML href指向其他东西

问题描述 投票:0回答:1

我正在尝试收集有关BCC Research市场分析报告的一些元数据。他们有不同的topics数据,如先进材料,生物技术等。

如果你在一个主题下,比如Advanced Materials,报告会分散在底部的许多导航页面中。

当我点击说出导航页面时,说出数字2,页面通过向上滚动“刷新”。这自然会将更多结果加载到屏幕上。现在的问题是,当我使用导航页面的href(例如,https://www.bccresearch.com/market-research/advanced-materials/page/2)检查链接时,它会将我带回主题的主页面,而不是第二页面。

我想知道是否有人可以帮助我。

编辑:单击导航页面链接之前和之后导航页面源的屏幕截图。 Before After

python html web-scraping
1个回答
1
投票

该页面使用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
© www.soinside.com 2019 - 2024. All rights reserved.