Не могу получить гиперссылку на красивый суп - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь получить гиперссылку элемента anchor (a), но продолжаю получать:

h ttps: //in.finance.yahoo.com/h ttps: //in.finance. yahoo.com/

enter image description here Я испробовал все представленные здесь решения: ссылка

Вот мой код:

href_links = []
symbols = []
prices = []
commodities = []

CommoditiesUrl = "https://in.finance.yahoo.com/commodities"
r = requests.get(CommoditiesUrl)
data = r.text
soup = BeautifulSoup(data)

counter = 40
for i in range(40, 404, 14):
    for row in soup.find_all('tbody'):
        for srow in row.find_all('tr'):
            for symbol in srow.find_all('td', attrs={'class':'data-col0'}):
                symbols.append(symbol.text)
                href_link =  soup.find('a').get('href')
                href_links.append('https://in.finance.yahoo.com/' + href_link)
            for commodity in srow.find_all('td', attrs={'class':'data-col1'}):
                 commodities.append(commodity.text)
            for price in srow.find_all('td', attrs={'class':'data-col2'}):
                prices.append(price.text)


pd.DataFrame({"Links": href_links, "Symbol": symbols, "Commodity": commodities, "Prices": prices })

Кроме того, я хотел бы знать, возможно ли, аналогично веб-сайту, иметь символ товара в качестве гиперссылки в моем pandas фрейме данных.

enter image description here

1 Ответ

0 голосов
/ 15 марта 2020

Я не уверен, что происходит с кодом, который вы разместили, но вы можете просто получить этот URL, find добавив элемент a с атрибутом data-symbol, установленным в GC=F. html имеет 2 таких элемента. Тот, который вы хотите, это первый, который возвращается soup.find('a', {'data-symbol': 'GC=F'}).get('href').

import requests, urllib

from bs4 import BeautifulSoup

CommoditiesUrl = "https://in.finance.yahoo.com/commodities"
r = requests.get(CommoditiesUrl)
data = r.text
soup = BeautifulSoup(data)

gold_href = soup.find('a', {'data-symbol': 'GC=F'}).get('href')

# If it is a relative URL, we need to transform it into an absolute URL (it always is, fwiw)
if not gold_href.startswith('http'):
    # If you insist, you can do 'https://in.finance.yahoo.com" + gold_href
    gold_href = urllib.parse.urljoin(CommoditiesUrl, gold_href)

print(gold_url)

Кроме того, я хотел бы знать, возможно ли, аналогично веб-сайту, иметь символ товара в виде гиперссылки в моем pandas фрейме данных.

Я не знаком с pandas, но я бы сказал, что ответ - да. См .: Как создать таблицу с интерактивной гиперссылкой в ​​pandas & Jupyter Notebook

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