0

На странице 100 данных необходимых для парсинга. Парсить пробую:

  1. Название кроптовалюты (парсится 10 из 100, а остальные попадают в блок except)
  2. Акроним (парсится 10 из 100, а остальные попадают в блок except)
  3. Ссылку (парсится 100 из 100)
  4. Стоимость (парсится 100 из 100)

Страница которую пробую парсить: https://coinmarketcap.com/ Код у 10 и 11 элемента не отличается, поэтому не понимаю в чем проблема. Напроимер 2 куска кода откуда я пытаюсь вытащить название криптовалюты: Dogecoin - пасится, Polkadot - не парсится

<div display="flex" class="sc-16r8icm-0 escjiH">
  <a href="/currencies/dogecoin/" 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/74.png" loading="lazy" alt="DOGE logo">
        <div class="sc-16r8icm-0 sc-1teo54s-1 dNOTPP">
           <p font-weight="semibold" color="text" font-size="1" class="sc-1eb5slv-0 iworPT">Dogecoin</p>
          <div data-nosnippet="true" class="sc-1teo54s-2 fZIJcI">
            <div class="sc-1teo54s-3 etWhyV">10</div>
              <p color="text3" class="sc-1eb5slv-0 gGIpIK coin-item-symbol" font-size="1">DOGE</p>
          </div>
        </div>
    </div>
  </a>
</div>

<div display="flex" class="sc-16r8icm-0 escjiH"> <a href="/currencies/polkadot-new/" 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/6636.png" loading="lazy" alt="DOT logo"> <div class="sc-16r8icm-0 sc-1teo54s-1 dNOTPP"> <p font-weight="semibold" color="text" font-size="1" class="sc-1eb5slv-0 iworPT">Polkadot</p> <div data-nosnippet="true" class="sc-1teo54s-2 fZIJcI"> <div class="sc-1teo54s-3 etWhyV">11</div> <p color="text3" class="sc-1eb5slv-0 gGIpIK coin-item-symbol" font-size="1">DOT</p> </div> </div> </div> </a> </div>

Мой код:

def get_data(html):
    soup = BeautifulSoup(html, 'lxml')
    tablerows = soup.find('table', class_='cmc-table').find('tbody').find_all('tr')
for tablerow in tablerows:
    td = tablerow.find_all('td') 
    try:
        name = td[2].find('div', class_='dNOTPP').find('p').text
    except:
        name=''

    try:
        symbol = td[2].find('p', class_='coin-item-symbol').text
    except:
        symbol=''

    try:
        url = 'https://coinmarketcap.com'+td[2].find('a').get('href')
    except:
        url=''

    try:
        price = td[3].find('span').text
    except:
        price=''

    #словарь
    data={'name':name, 'symbol':symbol , 'url':url, 'price':price}

    write_csv(data)
    print(name)</code></pre>

0 Answers0