Имеете дело с шестнадцатеричными значениями в ответе BeautifulSoup? - PullRequest
1 голос
/ 07 октября 2019

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

url = "https://www.transfermarkt.co.uk/jorge-molina/profil/spieler/94447"
heads = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}

response = requests.get(url,headers=heads)
soup = BeautifulSoup(response.text, "lxml")

Затем я извлекаю определенную часть информации:

height = soup.find_all("th", string=re.compile("Height:"))[0].findNext("td").text
print(height)

, которая работает как задумано, печатая

1,74 m

но когда я пытаюсь оценить эту строку с помощью этой функции:

def format_height(height_string):
    return int(height_string.split(" ")[0].replace(',',''))

я получаю следующую ошибку:

format_height(height)
Traceback (most recent call last):
  File "get_player_info.py", line 73, in <module>
    player_info = get_player_info(url)
  File "get_player_info.py", line 39, in get_player_info
    format_height(height)
  File "/Users/kompella/Documents/la-segunda/util.py", line 49, in format_height
    return int(height_string.split(" ")[0].replace(',',''))
ValueError: invalid literal for int() with base 10: '174\xa0m'

Мне интересно, как я долженоцените шестнадцатеричные значения, которые я получаю?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вместо атрибута = значение выберите целевую высоту, а затем используйте функцию как есть

import requests
from bs4 import BeautifulSoup as bs

def format_height(height_string):
    return int(height_string.split(" ")[0].replace(',',''))

r = requests.get('https://www.transfermarkt.co.uk/jorge-molina/profil/spieler/94447', headers = {'User-Agent':'Mozilla\5.0'})
soup = bs(r.content,'lxml')
height_string = soup.select_one('[itemprop=height]').text

print(format_height(height_string))
0 голосов
/ 07 октября 2019

Все отлично, просто разбери их, и после этого ты сможешь делать все, что захочешь.

import requests
import re
from bs4 import BeautifulSoup

url = "https://www.transfermarkt.co.uk/jorge-molina/profil/spieler/94447"
heads = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}

response = requests.get(url,headers=heads)
soup = BeautifulSoup(response.text, "lxml")

height = soup.find_all("th", string=re.compile("Height:"))[0].findNext("td").text
numerals = [int(s) for s in re.findall(r'\b\d+\b', height)]
print (numerals)
#output: [1, 74]
print ("Height is: " + str(numerals[0]) +"."+ str(numerals[1]) +"m")
#output: Height is: 1.75m
print ("Height is: " + str(numerals[0]) + str(numerals[1]) +"cm")
#output: Height is: 175cm

В любом случае, этот вопрос обсуждался в этой теме. Вы можете посмотреть: ValueError: недопустимый литерал для int () с основанием 10: ''

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