упорядочить имена (найдено соскоба inte rnet), чтобы использовать их в качестве ввода в запросах - PullRequest
0 голосов
/ 27 апреля 2020

Я использовал Crawler, чтобы собрать имена известных художников, певцов, музыкантов, групп. многие имена в моем списке структурированы с фамилией перед именем и запятой в середине. Я пишу пример из моего списка:

Aalegra, Snoh
Beach Boys
Groove Coverage
Night Verses
Gang Of Youths
Marcy Playground
Fito Blanko
Lowery, Clint
Josh Garrels
Pausini, Laura
Moses, Joe
Julian Trono
Meg Donnelly
Jack Gray
Jola, Marion
Pink Floyd
Judd, Wynonna
Bo Bruce

У меня есть функция, которая берет html википедии и извлекает некоторую информацию из таблицы справа (информация, такая как происхождение группы или дата и место рождения, о человеке и т. д.) но когда строка "фамилия, имя", википедия явно не находит страницу.

какие-либо идеи?

Должен ли я изменить все Строки, которые представляют эту проблему? или избегать использования запросов и попробовать селен? Я не знаю самый короткий и простой способ ...

ниже моего foo:

def get_other_info(artist):  
    r = requests.get('https://en.wikipedia.org/wiki/' + artist).text
    sleep(randint(2,15))
    obj = BeautifulSoup(r, 'html.parser')
    table = obj.find('table', class_='infobox vcard plainlist')
    for t in table.select('th'):
        if t.text == 'Origin' or t.text == 'Born':
            orig = t.find_next_siblings('td')[0].text
        elif t.text == 'Genres':
            gen = [i.text for i in t.find_next_siblings('td')[0].find_all('li')]
        elif t.text == 'Years active':
            yr = t.find_next_siblings('td')[0].text
    return [orig, gen, yr]

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете использовать функцию, подобную этой:

def searchstring(s):
    """Returns Wikipedia-friendly version of input string s."""
    if ',' in s:
        last, first = s.split(', ')
        return first + ' ' + last
    else:
        return s

names = ['Aalegra, Snoh', 'Beach Boys', 'Lowery, Clint', 'Josh Garrels']

for name in names:
    print(searchstring(name))
Snoh Aalegra
Beach Boys
Clint Lowery
Josh Garrels
...