首页 > 解决方案 > 组织名称(在互联网上找到)以将它们用作请求中的输入

问题描述

我用爬虫收集了一些著名艺术家、歌手、音乐家、团体的名字。我列表中的很多名字的结构都是在名字前面有姓氏,中间有一个逗号。我从我的列表中写了一个示例:

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 并从右侧的表格中提取一些信息(信息,如组的起源或出生日期和地点哦这个人等等)但是当字符串是“姓氏,名称”维基百科显然没有找到该页面。

有任何想法吗?

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

在我的 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]

标签: pythonpython-requestsscreen-scraping

解决方案


您可以使用这样的功能:

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

推荐阅读