Получить первую ссылку в div с помощью Beautifulsoup Python - PullRequest
2 голосов
/ 16 марта 2019

Я пытаюсь получить эту ссылку с помощью Beautifulsoup из этого HTML:

    <div id="downloads" style="text-align:left">
        Download as Excel tables:  
<a href="crispor.py?batchId=Kn3CuFPN9QbwruIqkBGk&download=guides&format=xls">Guides</a>

    <a href="crispor.py?batchId=Kn3CuFPN9QbwruIqkBGk&satMut=1">Saturating mutagenesis assistant</a><br>
            <small>Tab-sep format:  
    <a href="crispor.py?batchId=Kn3CuFPN9QbwruIqkBGk&download=guides&format=tsv">Guides</a>

Я пробовал этот код:

for link in soup.find_all('a', href=True, text='Guides'):
             crisporDL = link['href']

но это выводит вторую ссылку выше, так как вы видите, что у обоих есть текст «Руководства», как мне получить первую ссылку? поскольку первая ссылка возвращает файл XLS, а вторая - файл TSV, мне нужен файл xls.

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Использовать селектор идентификатора с a селектором тегов, переданным select_one.select_one возвращает первое совпадение.Это должно быть быстрее, чем при использовании find.

soup.select_one("#downloads a")['href']
0 голосов
/ 16 марта 2019

Я думаю, вы ищете метод find () , который возвращает только первое совпадение.

crisporDL=soup.find('a', href=True, text='Guides')['href']

В этом случае вам не нужно использовать цикл for.

Еще одна возможность без особых изменений в вашем коде - добавить предельный аргумент *1011* к вашему find_all () .

soup.find_all('a', href=True, text='Guides',limit=1)

Хотя это было бы совершенно ненужным, могут быть случаи, когда вы можете получить первые n совпадений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...