如何使用python删除webscrape名称的重音符号

2024-04-26 10:06:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张名单,但有些有口音。我希望能够找到该人的页面,而不必手动消除姓名上的重音,这会阻止搜索。有办法做到这一点吗

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) 

Tags: nameimporturldataframesearchdatabaseget
3条回答

^{}可以处理空格和unicode字符。然后,由于您处理的是搜索字符串,只需使用一个简单的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

当然,其他人提到的^{}模块也可以工作

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

以下是链接,您可以验证它是否正常工作

您可以安装一个名为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

相关问题 更多 >