Python爬虫非数字分页:如何将姓名拼接为目标URL
问题:如何将姓名列表拼接成指定格式的URL
我正在为所在大学的网站编写爬虫并实现分页。其中目标页面的URL格式为https://www.bu.edu/com/profile/名-姓/(若有中间名则为https://www.bu.edu/com/profile/名-中间名-姓/)。我已规划好中间名的处理方案,当前需要解决的是:如何将已获取的姓名列表中的姓名拼接到底URL,生成符合上述格式的对应URL。
以下是我的代码:
import requests from bs4 import BeautifulSoup url = 'https://www.bu.edu/com/profiles/faculty/page/1/' data = requests.get(url) my_data = [] split_names = [] firstnames = [] lastnames = [] middlenames = [] html = BeautifulSoup(data.text, 'html.parser') professors = html.select('h4.profile-card__name') for professor in professors: my_data.append(professor.text) for name in my_data: x = name.split() split_names.append(x) for name in split_names: f, l = zip(*split_names) firstnames.append(f) lastnames.append(l) #\/ appending searchable url using names for name in split_names: baseurl = "https://www.bu.edu/com/profile/" newurl = baseurl + print(firstnames) print(lastnames)
解决方案
- 修正姓名拆分逻辑:原代码中
f, l = zip(*split_names)的写法错误,它会把所有姓名的首尾元素批量打包,而非单个姓名的拆分。应该针对每个拆分后的姓名列表单独处理。 - 生成URL后缀:URL中的姓名格式是全小写+连字符连接所有名字部分,直接用
'-'.join(name_parts).lower()即可生成符合要求的后缀,再拼到底URL后并加上结尾的/。
修正后的完整代码
import requests from bs4 import BeautifulSoup url = 'https://www.bu.edu/com/profiles/faculty/page/1/' data = requests.get(url) my_data = [] split_names = [] professor_urls = [] html = BeautifulSoup(data.text, 'html.parser') professors = html.select('h4.profile-card__name') # 提取所有教授姓名并去除首尾空格 for professor in professors: my_data.append(professor.text.strip()) # 拆分每个姓名为部件 for name in my_data: split_names.append(name.split()) # 生成每个教授的个人页面URL baseurl = "https://www.bu.edu/com/profile/" for name_parts in split_names: # 将姓名部件用连字符连接并转小写,加上结尾斜杠 name_suffix = '-'.join(name_parts).lower() + '/' newurl = baseurl + name_suffix professor_urls.append(newurl) # 输出结果 print("教授个人页面URL列表:") for url in professor_urls: print(url)
关键说明
strip()用于去除姓名文本中可能存在的首尾空格,避免拆分出空字符串。'-'.join(name_parts)不管姓名是2个还是3个部件(含中间名),都能自动用连字符连接,完美适配两种URL格式。.lower()确保姓名转成全小写,和目标URL的格式保持一致。
内容的提问来源于stack exchange,提问作者Gregory Durgin
相关产品推荐
相关产品推荐

