如何修正Playwright爬虫:点击赛马链接并抓取详情页表格
问题修正方案
问题根源
点击马名链接后你立即获取页面内容,但Playwright跳转新页面需要时间加载,此时抓取的仍是原赛事卡页面的HTML,自然输出原表格。
修正后的代码
import pandas as pd from playwright.sync_api import sync_playwright def scrape_ranking(url): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto(url) # 监听新弹窗并点击马名链接 with page.expect_popup() as popup_context: page.click('text="AI ONE"') # 获取详情页对象 detail_page = popup_context.value # 等待详情页表格加载完成,确保内容完整 detail_page.wait_for_selector('table') # 抓取详情页HTML html = detail_page.content() browser.close() # 解析详情页表格,若目标表格不是第一个可调整索引 tables = pd.read_html(html) df = tables[0] df.to_excel("hkjc_detail.xlsx", index=False) url_1 = 'https://racing.hkjc.com/racing/information/English/racing/RaceCard.aspx?RaceDate=2023/04/06&Racecourse=HV&RaceNo=1' scrape_ranking(url_1)
关键调整说明
- 用
page.expect_popup()捕获马名链接打开的新窗口,确保定位到详情页而非原页面; - 新增
wait_for_selector('table')等待详情页核心元素加载,避免获取未渲染完成的HTML; - 删除了原代码中未实际使用的
xlsxwriter、BeautifulSoup、xlwings库导入,可按需恢复。
内容的提问来源于stack exchange,提问作者NNBananas
相关产品推荐
相关产品推荐

