Python网页爬取求助:如何通过源URL获取点击跳转后的目标URL
问题:无法提取跳转后的目标URL
我在提取URL跳转流程时遇到阻碍:访问源URL后会重定向到一个带点击按钮的页面,必须点击按钮才能进入实际要爬取的目标页面。
- 源URL:
http://ndl.iitkgp.ac.in/nw_document/economictimes/IN__T_E_T___2__1_2001__3_12__65_05__23_71 - 点击按钮后进入目标页面(对应页面可查看截图)
我使用Selenium、WebDriver和Beautiful Soup编写代码,但现有代码无法找到所需链接:
soup = BeautifulSoup(driver.page_source, 'html.parser') # Find the final URL based on the given HTML structure final_link = soup.find('a', class_='btn btn-success', href=True) if final_link: final_url = final_link['href'] print(f"Found final URL: {final_url}") posts_urls.append(final_url) else: print("No final URL found in the expected format.")
解决方案
1. 等待元素加载完成
页面可能存在异步加载,直接获取page_source时目标元素还未渲染,需用Selenium的显式等待确保元素加载完成:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最长等待10秒,直到目标按钮元素出现 wait = WebDriverWait(driver, 10) target_btn = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "btn-success"))) # 获取按钮的href属性 final_url = target_btn.get_attribute('href') if final_url: print(f"找到目标URL: {final_url}") posts_urls.append(final_url) else: print("未找到目标URL")
2. 修正Beautiful Soup的元素选择器
原代码用class_='btn btn-success'无法匹配多类名(空格分隔的多个class),改用CSS选择器即可正确定位:
soup = BeautifulSoup(driver.page_source, 'html.parser') # 使用CSS选择器匹配同时拥有btn和btn-success类的a标签 final_link = soup.select_one('a.btn.btn-success[href]') if final_link: final_url = final_link['href'] print(f"找到目标URL: {final_url}") posts_urls.append(final_url) else: print("未找到目标URL")
3. 直接点击按钮后获取当前URL
如果目标URL是点击按钮后跳转得到的,也可以直接点击按钮,再获取跳转后的页面URL:
# 等待按钮可点击 target_btn = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "btn-success"))) target_btn.click() # 获取跳转后的当前页面URL final_url = driver.current_url print(f"跳转后的目标URL: {final_url}") posts_urls.append(final_url)
关键注意点
- 先通过浏览器开发者工具确认按钮的实际class属性,避免选择器匹配错误
- 如果页面存在弹窗、iframe等干扰元素,需先处理这些元素再定位目标按钮
内容的提问来源于stack exchange,提问作者Krati Dangi
相关产品推荐
相关产品推荐

