Получение первой ссылки в этом коде с помощью Python - PullRequest
0 голосов
/ 27 марта 2019

Здравствуйте, это код, который я хочу получить с помощью BeautifulSoup первой ссылки.

view-source: https://www.binance.com/en/blog

Я хочу получить первую статью здесь, чтобы она была "Trust Wallet теперь поддерживает Stellar Lumens, еще 4 токена "

Я пытаюсь использовать Python для этого.

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

with open('binanceblog1.html', 'w') as article:
    before13 = requests.get("https://www.binance.com/en/blog", headers=headers2)    
    data1b = before13.text

    xsoup2 = BeautifulSoup(data1b, "lxml")      
    for div in xsoup2.findAll('div', attrs={'class':'title sc-0 iaymVT'}):
        before_set13 = div.find('a')['href']

Как я могу это сделать?

Ответы [ 4 ]

0 голосов
/ 28 марта 2019

Используйте имя класса с селектором класса css (.) для раздела содержимого, затем descendant combinator с селектором типа css a, чтобы указать дочерний элемент тега a. select_one возвращает первое совпадение

soup.select_one('.content a')['href']

Код:

from bs4 import BeautifulSoup as bs
import requests

r = requests.get('https://www.binance.com/en/blog')   
soup = bs(r.content, 'lxml')
link = soup.select_one('.content a')['href']
print('https://www.binance.com' + link)
0 голосов
/ 27 марта 2019

Самое простое решение, которое я могу представить на данный момент, которое работает с вашим кодом, это использовать break, это из-за findAll

for div in xsoup2.findAll('div', attrs={'class':'title sc-62mpio-0 iIymVT'}):
    before_set13 = div.find('a')['href']
    break

Только для первого элемента, который вы можете использовать find

before_set13 = soup.find('div', attrs={'class':'title sc-62mpio-0 iIymVT'}).find('a')['href']

0 голосов
/ 27 марта 2019

Try (Извлечение href из кнопки «Подробнее»)

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.binance.com/en/blog')
soup = BeautifulSoup(r.text, "html.parser")
div = soup.find('div', attrs={'class': 'read-btn sc-62mpio-0 iIymVT'})
print(div.find('a')['href'])
0 голосов
/ 27 марта 2019

Вы можете оценить ситуацию внутри цикла и break, когда найдете удовлетворительный результат.

for div in xsoup2.findAll('div', attrs={'class':'title sc-62mpio-0 iIymVT'}):
    before_set13 = div.find('a')['href']
    if before_set13 != '/en/blog':
         break
    print('skipping ' + before_set13)
print('grab ' + before_set13)

Вывод кода со следующими изменениями:

skipping /en/blog  
grab /en/blog/317619349105270784/Trust-Wallet-Now-Supports-Stellar-Lumens-4-More-Tokens
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...