组织名称(发现是在网上搜刮),以将其用作请求中的输入

问题描述 投票:0回答:1

我曾使用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

我有一个功能,它可以提取Wikipedia的html并从右边的表中提取一些信息(例如Group Origin或人的出生日期和地点等信息),但是当字符串为“姓,名”维基百科显然找不到该页面。

任何想法?

我应该更换所有出现此问题的字符串吗?还是避免使用请求并尝试硒?我不知道最短,最简单的方法...

在我的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]
python python-requests screen-scraping
1个回答
0
投票

您可以使用类似这样的功能:

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
© www.soinside.com 2019 - 2024. All rights reserved.