Dimpik
@Dimpik

Как получить внутренности тега «< a >» при помощи атрибута href?

Мне нужно получить все то, что находится внутри тега <a> при помощи уникального значения атрибута href.
Как реализовать на BeautifulSoup?

Код:
import requests
from bs4 import BeautifulSoup

URL = 'https://www.tinkoff.ru/invest/stocks/?country=All&orderType=Asc&sortType=ByName&start=0&end=12'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
           'accept': '*/*'}

def get_HtmlSource(url, params = None):
    result = requests.get(url, headers=HEADERS, params=params)
    return result

def get_content(source):
    soup = BeautifulSoup(source.text, "html.parser")
    Stock = soup.find_all('a', href_='/invest/stocks/MMM/')
    print(Stock)

    Info = []
    for item in Stock:
        Info.append({'Name': item.find('span', class_="NameColumn__nameWrapper_177eF").get_text()})
        Info.append({'Price': item.find('span', class_="Money-module__money_3h4MT").get_text()})

    print(Info)

def parse():
    source = get_HtmlSource(URL)

    if source.status_code == 200:
        get_content(source)
    else:
        print("Request failed")

parse()
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
def get_content(source):
    soup = BeautifulSoup(source.text, "html.parser")
    Stock = soup.find_all('a', {"href": '/invest/stocks/MMM/'})
            
    Info = []
    item = Stock[0]
    name = item.find('span', {"class": "NameColumn__nameWrapper_177eF"}).get_text()
    Info.append({'Name': name})
    item = Stock[2]
    price = item.find(("span", {"class": "Money-module__money_3h4MT"})).get_text().split('\xa0')[0]
    Info.append({'Price': price})

    print(Info)

Признаться, все эти гирлянды методов ужасны и очень ненадежны.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Story-teller
Stock = soup.find_all('a', href_='/invest/stocks/MMM/')
for row in Stock:
    print(row.text)

выдает:
3M CompanyMMM
+3,13 $1,76%
180,76 $
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы