Skip to main content
 首页 » 编程设计

python之抓取不同数量姓氏的名单

2025年05月04日14wayfarer

试图用 Beautiful Soup 刮瑞典议 session 员。当我运行 scraper 时,我得到“ValueError:要解压的值太多(预期为 3)”。

该脚本输出一个 csv,但只有五个名字。名单上的第六个人名叫 Alm Ericson, Janine (MP)。我想问题是她有两个姓氏——Alm Ericson,而代码只需要三个值,名字、姓氏和派对。

我应该如何对字段拆分进行编码以使其也适用于双姓氏?

页面上的名字写成

Last_name, first_name (party) 

代码:

import urllib.request 
import bs4 as bs 
import csv 
 
source = urllib.request.urlopen("https://www.riksdagen.se/sv/ledamoter-partier/").read() 
soup = bs.BeautifulSoup(source, "lxml") 
 
data = [] 
 
for span in soup.find_all("span", {"class": "fellow-name"}): 
    cleanednames = span.text.strip() 
    data.append(cleanednames)  #fields are appended to list rather printing 
 
with open("riksdagsledamoter.csv", "w") as stream: 
    fieldnames = ["Last_Name","First_Name","Party"] 
    var = csv.DictWriter(stream, fieldnames=fieldnames) 
    var.writeheader() 
    for item in data: 
        last_name, First_name, party = item.split()  #splitting data in 3 fields 
        last_name = last_name.replace(",","")  #removing ',' from last name 
        party = party.replace("(","").replace(")","")  #removing "()" from party 
        var.writerow({"Last_Name": last_name,"First_Name": First_name, "Party": party})  #writing to csv row 

请您参考如下方法:

很明显,拆分在这里不是一个好的解决方案。 (或者你应该用逗号和括号而不是空格分开)

使用正则表达式:

import re 
re.match('([^,]*), ([^(]*) \((.*)\)', 'Alm Ericson, Janine (MP)').groups() 

返回

('Alm Ericson', 'Janine', 'MP')