You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

解决方案

  1. 修正姓名拆分逻辑:原代码中f, l = zip(*split_names)的写法错误,它会把所有姓名的首尾元素批量打包,而非单个姓名的拆分。应该针对每个拆分后的姓名列表单独处理。
  2. 生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:40:39