使用 playwright 抓取下拉列表

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

我正在努力寻找一种方法来单击下拉列表中的“全部”选项并抓取该页面内的所有内容。我看到了一些帖子,但它们与我的情况有点不同。我的“选择”似乎没有 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())`

我希望从下拉列表中的“全部”选项中抓取所有内容。我花了一周的时间来解决这个问题,但找不到有效的解决方案。我对此还很陌生,所以如果这个问题对你们大多数人来说听起来很天真,请原谅我

javascript python web-scraping dropdown scrapy-playwright
1个回答
0
投票

你的问题是选择器。

page.locator('.Pagination_pageDropdown__KgjBU.DropDown_select__4pIg9')
试图选择一个同时具有
.Pagination_pageDropdown__KgjBU
.DropDown_select__4pIg9
类的元素,这不是您想要的 - 您试图选择 only
select
标签。

尝试

page.locator('.DropDown_select__4pIg9')
。我敢打赌这可以解决您的问题。

参见 基于多个类选择元素

© www.soinside.com 2019 - 2024. All rights reserved.