我正在努力寻找一种方法来单击下拉列表中的“全部”选项并抓取该页面内的所有内容。我看到了一些帖子,但它们与我的情况有点不同。我的“选择”似乎没有 id 或标签,“名称”为空。
我正在抓取的网站是 https://www.nba.com/stats/players/traditional?Season=1998-99&SeasonType=Regular+Season
<div class="Pagination_pageDropdown__KgjBU">
<div class="DropDown_content__Bsm3h">
<label class="DropDown_label__lttfI">
<p data-no-label="true"></p>
<div class="DropDown_dropdown__TMlAR">
<select name="" class="DropDown_select__4pIg9">
<option value="-1">All</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option
<option value="3">4</option>
<option value="4">5</option>
<option value="5">6</option>
<option value="6">7</option>
<option value="7">8</option>
<option value="8">9</option>
</select>
...
我当前的代码如下所示:
导入异步 从 playwright.async_api 导入 async_playwright 从 NBA.spiders.nba 导入 NbaScraping
`async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
spider = NbaScraping()
spider.start_requests()
for url in spider.start_urls:
await page.goto(url)
selector = page.locator('.Pagination_pageDropdown__KgjBU.DropDown_select__4pIg9')
await selector.wait_for()
page.select_option(value='-1')
page.wait_for_timeout(5999)
await browser.close()
asyncio.run(main())`
我希望从下拉列表中的“全部”选项中抓取所有内容。我花了一周的时间来解决这个问题,但找不到有效的解决方案。我对此还很陌生,所以如果这个问题对你们大多数人来说听起来很天真,请原谅我
你的问题是选择器。
page.locator('.Pagination_pageDropdown__KgjBU.DropDown_select__4pIg9')
试图选择一个同时具有 .Pagination_pageDropdown__KgjBU
和 .DropDown_select__4pIg9
类的元素,这不是您想要的 - 您试图选择 only select
标签。
尝试
page.locator('.DropDown_select__4pIg9')
。我敢打赌这可以解决您的问题。
参见 基于多个类选择元素