python - 组织名称(在互联网上找到)以将它们用作请求中的输入
问题描述
我用爬虫收集了一些著名艺术家、歌手、音乐家、团体的名字。我列表中的很多名字的结构都是在名字前面有姓氏,中间有一个逗号。我从我的列表中写了一个示例:
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]
解决方案
您可以使用这样的功能:
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
推荐阅读
- regex - Lua:如何替换两个或多个重复的“?” 带有空字符串的字符?
- mysql - 当我迁移文件时,它只显示 varchar(191) 而不是 255
- openstreetmap - 如何将自定义数据转换为 osm.pbf
- javascript - JS定义后如何使用对象解构
- java - 上传到 Firebase Storeage 等待上传完成然后上传到 Firebase 并返回任务
- python - Django:如何防止其他用户更新或删除不对应的个人资料的帖子?
- reporting-services - 如何让 rdlc 报表设计器在 Visual Studio 2017 中工作?
- vba - 建议通过从左到右的列而不是使用 if 语句更有效地删除重复项
- c# - 为什么 HttpPostedFileBase 在执行表单提交后返回空值?
- android - 为什么我得到程序类型已经存在:com.google.common.base.FinalizableReference