Как убрать акценты на имени веб-скрапа, используя python - PullRequest
2 голосов
/ 31 января 2020

У меня есть список имен, но у некоторых есть акценты. я хочу, чтобы можно было найти страницу человека без необходимости вручную избавляться от ударения на имени, что мешает поиску. Есть ли способ сделать это?

import requests
from bs4 import BeautifulSoup
import pandas as pd
from pandas import DataFrame

base_url = 'https://basketball.realgm.com'

player_names=['Ante Žižić','Anžejs Pasečņiks', 'Dario Šarić', 'Dāvis Bertāns', 'Jakob Pöltl']

# Empty DataFrame
result = pd.DataFrame()

for name in player_names:
    url = f'{base_url}/search?q={name.replace(" ", "+")}' 
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    if url == response.url:
        # Get all NBA players
        for player in soup.select('.tablesaw tr:has(a[href*="/nba/teams/"]) a[href*="/player/"]'): 
            response = requests.get(base_url + player['href'])
            player_soup = BeautifulSoup(response.content, 'lxml') 
            player_data = get_player_stats(search_name=player.text, real_name=name, player_soup=player_soup) 
            result = result.append(player_data, sort=False).reset_index(drop=True)
    else:
        player_data = get_player_stats(search_name=name, real_name=name, player_soup=soup) 
        result = result.append(player_data, sort=False).reset_index(drop=True) 

Ответы [ 3 ]

2 голосов
/ 31 января 2020

Вы можете установить пакет с именем unidecode .

Теперь вы можете сделать что-то подобное перед дальнейшей обработкой списка:

player_names=['Ante Žižić','Anžejs Pasečņiks', 'Dario Šarić', 'Dāvis Bertāns', 'Jakob Pöltl']

for player in player_names:
    player=unidecode(player)
    print(player)

Вывод:

Ante Zizic
Anzejs Pasecniks
Dario Saric
Davis Bertans
Jakob Poltl
2 голосов
/ 31 января 2020

python-slugify может обрабатывать пробелы и символы Юникода. Затем, поскольку вы имеете дело со строкой поиска, просто конвертируйте - в + с помощью простого replace('-', '+').

from slugify import slugify

base_url = "https://basketball.realgm.com"

player_names = [
    "Ante Žižić",
    "Anžejs Pasečņiks",
    "Dario Šarić",
    "Dāvis Bertāns",
    "Jakob Pöltl",
]

for name in player_names:
    url = f"{base_url}/search?q={slugify(name).replace('-', '+')}"
    print(url)

Вывод:

https://basketball.realgm.com/search?q=ante+zizic
https://basketball.realgm.com/search?q=anzejs+pasecniks
https://basketball.realgm.com/search?q=dario+saric
https://basketball.realgm.com/search?q=davis+bertans
https://basketball.realgm.com/search?q=jakob+poltl

Предоставлено, модуль unidecode, о котором упоминали другие, также будет работать.

from unidecode import unidecode

for name in player_names:
    url = f"{base_url}/search?q={unidecode(name).replace(' ', '+')}"
    print(url)

Похоже, что URL не имеет значения, если у вас есть строчные или заглавные буквы для имен.

https://basketball.realgm.com/search?q=Ante+Zizic
https://basketball.realgm.com/search?q=Anzejs+Pasecniks
https://basketball.realgm.com/search?q=Dario+Saric
https://basketball.realgm.com/search?q=Davis+Bertans
https://basketball.realgm.com/search?q=Jakob+Poltl

Вот ссылки, чтобы вы могли проверить, работает ли он.

0 голосов
/ 31 января 2020

Попробуйте ответить 2 на этот вопрос: Замените не-ASCII символы одним пробелом - модуль unidecode

...