Соскоб в сети с Beautifulsoup ничего не найдя - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь очистить coinmarketcap.com просто для того, чтобы получить обновление определенной цены в валюте, а также просто узнать, как обрабатывать веб-страницы.Я все еще новичок и не могу понять, где я иду не так, потому что всякий раз, когда я пытаюсь запустить его, он просто говорит мне, что их нет.Хотя я знаю, что эта линия существует.Любая помощь приветствуется!

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
price = soup.find('data-currency-price data-usd=')
print (price)

Ответы [ 5 ]

0 голосов
/ 28 февраля 2019

Если вы собираетесь это делать, рассмотрите возможность совершения одного звонка с использованием официального API и получите все цены.Затем извлеките то, что вы хотите.Ниже с сайта с поправкой мной, чтобы показать желаемое значение для Electroneum.В руководстве по API показано, как извлекать по одному , хотя для этого требуется более высокий план, чем базовый.

from requests import Request, Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json

url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
parameters = {
      'start': '1',
      'limit': '5000',
      'convert': 'USD',
  }
headers = {
      'Accepts': 'application/json',
      'X-CMC_PRO_API_KEY': 'yourKey',
  }

session = Session()
session.headers.update(headers)

try:
    response = session.get(url, params=parameters)
    # print(response.text)
    data = json.loads(response.text)
    print(data['data'][64]['quote']['USD']['price'])
except (ConnectionError, Timeout, TooManyRedirects) as e:
    print(e)

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

interested = ['Electroneum','Ethereum']
for item in data['data']:
    if item['name'] in interested:
        print(item)

Для вашего текущего примера:

Вы можете использовать селектор атрибута для data-currency-value

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
soup.select_one('[data-currency-value]').text

0 голосов
/ 28 февраля 2019

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

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
price = soup.find('span' ,attrs={"class" : "h2 text-semi-bold details-panel-item--price__value"})
print (price.text)

Вывод:

0.006778
0 голосов
/ 28 февраля 2019

Вы должны попытаться быть более точным в том, как вы хотите НАЙТИ элемент.

, который вы в настоящее время используете soup.find('') Я не уверен, что вы вложили в это, когда писали data-currency-pricedata-usd = Это идентификатор класса?

Почему бы не попробовать найти элемент с помощью идентификатора.

soup.find(id="link3")

или найти по тегу

soup.find("relevant tag name like div or a")

или что-то в этом роде

find_this = soup.find("a", id="ID HERE")
0 голосов
/ 28 февраля 2019
import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
x=soup(id="quote_price").text
print (x)

Ищите идентификатор лучше или ищите через soup.find_all(text="data-currency-price data-usd")[1].text

0 голосов
/ 28 февраля 2019

Вы можете получить значение следующим образом:

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
price = soup.find("span", id="quote_price").get('data-usd')
print (price)
...