Scrapy二级下拉多选项爬取失败及多级提取方案咨询
问题分析
原脚本没法抓到部分场景下的二级/三级下拉选项,主要问题出在:
- 目标页面的下拉选项靠JavaScript动态生成——选特定Size(比如6ft 4in)后,对应的Capacity、Pack Pieces选项才会通过JS加载出来。但Scrapy默认只爬静态HTML,触发不了JS交互,自然拿不到动态加载的内容。
- 原
parse_button方法只从静态响应里提取option标签,碰到需要JS渲染的选项就抓空了。
解决方案:结合Playwright模拟交互抓取
要实现「点击button_url后提取动态下拉选项」,需要用浏览器自动化工具(如Playwright)模拟用户交互,触发JS渲染后再提取数据。以下是完整实现代码:
from scrapy import Spider from scrapy.crawler import CrawlerProcess from playwright.sync_api import sync_playwright class BcfSpider(Spider): name = 'product_spider' start_urls = ['https://www.bcf.com.au/p/daiwa-23-td-black-spinning-rod/M675158.html'] def parse(self, response): # 获取所有Size按钮的URL button_urls = response.css('.swatchanchor::attr(href)').getall() with sync_playwright() as p: # 启动浏览器,headless=True可改为无头模式 browser = p.chromium.launch(headless=False) page = browser.new_page() for button_url in button_urls: page.goto(button_url) # 等待下拉菜单元素加载完成 page.wait_for_selector('.variation-select') dropdown_data = {} # 遍历每个下拉菜单(Size、Capacity、Pack Pieces) for select in page.query_selector_all('.variation-select'): # 获取下拉菜单的分类标签 label = select.query_selector('..').text_content().strip() # 提取该菜单下的所有有效选项 options = [] for opt in select.query_selector_all('option'): opt_value = opt.get_attribute('value') opt_text = opt.text_content().strip() if opt_value and opt_text: options.append({'text': opt_text, 'value': opt_value}) dropdown_data[label] = options yield dropdown_data browser.close() if __name__ == "__main__": process = CrawlerProcess(settings={ 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' }) process.crawl(BcfSpider) process.start()
关键改进点
- 用Playwright启动真实浏览器,模拟完整的页面加载和JS渲染流程,确保动态生成的下拉选项能被抓取到。
- 按下拉菜单的分类(Size、Capacity等)整理选项数据,避免原脚本用选项文本当字典key导致的内容覆盖问题。
- 增加空值过滤逻辑,剔除无效的空选项数据。
注意事项
- 先安装依赖:
pip install scrapy playwright,再运行playwright install chromium安装浏览器驱动。 - 若不需要可视化浏览器,可将
launch(headless=False)改为launch(headless=True)。 - 页面加载慢时,可添加
page.wait_for_timeout(1000)(单位毫秒)确保内容完全渲染。
内容的提问来源于stack exchange,提问作者Patrick Flores
相关产品推荐
相关产品推荐

