(根據評論的建議修改)
我正在嘗試做的是:從該網站獲取所有 100 個加密貨幣名稱的網路抓取。
問題:我使用的選擇器沒有選擇頁面上的所有加密名稱。只有其中一些被選中。
在該網頁中,有 100 行,每一行都有一個加密貨幣名稱。所以總共有100個名字。
如果我使用這個選擇器tr td a[href*="/currencies/"][href$="/"]:not([href$="/markets/"]),
它會找到頁面上的所有 100 個元素,我可以從這 100 個元素中獲取每個加密貨幣的 URL。(一頁有 100 種加密貨幣)
所選 100 個元素的一個樣本:
<a href="/currencies/ethereum/" class="cmc-link"><div class="sc-16r8icm-0 sc-1teo54s-0 dBKWCw"><img class="coin-logo" src="https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png" loading="lazy" alt="ETH logo"><div class="sc-16r8icm-0 sc-1teo54s-1 dNOTPP"><p font-weight="semibold" color="text" font-size="1" class="sc-1eb5slv-0 iworPT">Ethereum</p><div class="sc-1teo54s-2 fZIJcI"><div class="sc-1teo54s-3 etWhyV">2</div><p color="text3" class="sc-1eb5slv-0 gGIpIK coin-item-symbol" font-size="1">ETH</p></div></div></div></a>
- 目前沒問題。
但是,如果我添加>div>div>p到此選擇器以獲取每個加密名稱,
( tr td a[href*="/currencies/"][href$="/"]:not([href$="/markets/"])>div>div>p),
僅選擇了 19 個元素,而不是全部 100 個元素。
所選元素的一個示例:
<p font-weight="semibold" color="text" font-size="1" class="sc-1eb5slv-0 iworPT">Ethereum</p>
如果我向下滾動頁面,所選元素的數量會增加,但我想要的是在沒有滾輪的情況下獲得所有 100 個元素。
- 為什么第一個選擇器會立即找到整個元素,而第二個選擇器需要向下滾動頁面?
- 我應該使用什么選擇器在不向下滾動的情況下選擇所有 100 個加密貨幣名稱?
提前致謝 :)
(我正在嘗試使用 Playwright 進行網頁抓取,但我認為這只是關于 CSS 選擇器的一般問題)
uj5u.com熱心網友回復:
這不是 css 選擇器的問題。這是一個動態加載的頁面,因此要獲取其內容,您需要呼叫 API
https://api.coinmarketcap.com/data-api/v3/map/all?listing_status=active,untracked&exchangeAux=is_active,status&cryptoAux=is_active,status&start=10001&limit=10000
一旦你這樣做了,你就會得到一個 json。例如,要從中提取貨幣代碼,您需要
const obj = JSON.parse(response);
curs = obj['data']['cryptoCurrencyMap']
如果你跑
for (let cur of curs)
{console.log(cur['symbol'])}
你應該得到相當多的代碼......
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/380686.html
標籤:javascript html 查询 css 网页抓取
