BeautifulSoup, 1 элемент имеет 2x одинаковые ссылки, как распечатать только 1? - PullRequest
0 голосов
/ 19 ноября 2018

Привет, после запуска этого кода:

import requests
from bs4 import BeautifulSoup


page = requests.get('https://coinpaprika.com')
soup = BeautifulSoup(page.text, 'html.parser')

coin_list = soup.find('tbody')
coin_list_items = coin_list.find_all('a')

for coin_name in coin_list_items:
    names = coin_name.string
    links = 'https://coinpaprika.com' + coin_name.get('href')
    print(names)
    print(links)

Программа печати:

None
https://coinpaprika.com/coin/btc-bitcoin/
Bitcoin
https://coinpaprika.com/coin/btc-bitcoin/
None
https://coinpaprika.com/coin/xrp-xrp/
XRP
https://coinpaprika.com/coin/xrp-xrp/
None
https://coinpaprika.com/coin/eth-ethereum/
Ethereum
https://coinpaprika.com/coin/eth-ethereum/

Вместо:

Bitcoin
https://coinpaprika.com/coin/btc-bitcoin/
XRP
https://coinpaprika.com/coin/xrp-xrp/
Ethereum
https://coinpaprika.com/coin/eth-ethereum/

Я понимаю, что причина этого:

<td class="table__fixed-cell">
                    <a href="/coin/btc-bitcoin/"><span class="coin-icon currency_images-0"></span></a>
                </td>


<td class="table__fixed-cell">
                    <a href="/coin/btc-bitcoin/">Bitcoin</a>
                    <small>BTC</small>
                </td>

Но я все еще не знаю, как напечатать только второй. Кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Просто найдите тег, который содержит текст.

coin_list_items = coin_list.find_all('a',text=True)
0 голосов
/ 19 ноября 2018

некоторые ссылки содержат пустой текст привязки, поскольку он используется для изображения значка,

<a href="/coin/btc-bitcoin/"><span class="coin-icon currency_images-0"></span></a>

добавить проверку

for coin_name in coin_list_items:
    names = coin_name.string
    if not names:
      continue
    links = 'https://coinpaprika.com' + coin_name.get('href')
    print(names)
    print(links)
...