Извлечение данных из диапазона с BeautifulSoup - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь извлечь данные из диапазона с BeautifulSoup двумя способами

import requests
import bs4

url ='https://www.futbin.com/19/player/477/Jordan%20Henderson/'
page = requests.get(url).content
soup = bs4.BeautifulSoup(page, 'lxml')



price1 = soup.find("div", {"class": "bin_price lbin"}).span.contents
price2 = soup.select('#ps-lowest-1')


print(price1)
print(price2)

Это дало мне два результата

[u'\n', <span id="ps-lowest-1">-</span>, u'\n']
[<span id="ps-lowest-1">-</span>]
[Finished in 1.0s]

Теперь я хочу извлечь данные (цена) из этого промежутка, и я не могу Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

bs4 select предоставляет список совпавших тегов.
Следуя вашему примеру, что делать:

price1 = soup.find("div", {"class": "bin_price lbin"}).span.contents
price2 = soup.select('#ps-lowest-1')

Доступ к тексту внутри первого элемента в списке:

print(price2[0].text)

Или отметьте все:

for elem in price2:
  print(elem.text)
0 голосов
/ 13 декабря 2018

Требуемые данные поступают из XHR или Ajax. Сначала необходимо извлечь идентификатор, а затем использовать его для получения содержимого JSON.

import requests
from bs4 import BeautifulSoup

url ='https://www.futbin.com/19/player/477/Jordan%20Henderson/'
page = requests.get(url).text
soup = BeautifulSoup(page, 'html.parser')

playerId = soup.find(id="page-info")['data-baseid'] # 183711

jsonURL = url ='https://www.futbin.com/19/playerPrices?player=' + playerId
jsonObj = requests.get(url).json()
# print(jsonObj)

psLowestPrice = jsonObj[playerId]['prices']['ps']['LCPrice']
print(psLowestPrice)
0 голосов
/ 13 декабря 2018

Фактические цены отсутствуют в HTML, который вы получаете внутри переменной page. Цены загружаются динамически через отдельный запрос в вашем браузере .

Вы также можете смоделировать этот запрос в своем коде:

from pprint import pprint
import requests

url ='https://www.futbin.com/19/playerPrices?player=183711'
page = requests.get(url).json()

pprint(page)

Выведет:

{u'183711': {u'prices': {u'pc': {u'LCPrice': u'1,500',
                                 u'LCPrice2': u'1,500',
                                 u'LCPrice3': u'1,500',
                                 u'LCPrice4': u'1,500',
                                 u'LCPrice5': u'1,500',
                                 u'MaxPrice': u'10,000',
                                 u'MinPrice': u'700',
                                 u'PRP': u'8',
                                 u'updated': u'49 mins ago'},
                         u'ps': {u'LCPrice': u'1,300',
                                 u'LCPrice2': u'1,300',
                                 u'LCPrice3': u'1,300',
                                 u'LCPrice4': u'1,300',
                                 u'LCPrice5': u'1,300',
                                 u'MaxPrice': u'10,000',
                                 u'MinPrice': u'700',
                                 u'PRP': u'6',
                                 u'updated': u'25 mins ago'},
                         u'xbox': {u'LCPrice': u'1,500',
                                   u'LCPrice2': u'1,500',
                                   u'LCPrice3': u'1,600',
                                   u'LCPrice4': u'1,600',
                                   u'LCPrice5': u'1,600',
                                   u'MaxPrice': u'10,000',
                                   u'MinPrice': u'700',
                                   u'PRP': u'8',
                                   u'updated': u'30 mins ago'}}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...