如何用BeautifulSoup将抓取的每个href赋值给link1、link2等变量
How to Assign Scraped hrefs to Individual Variables (link1, link2, etc.) with BeautifulSoup
我希望将通过BeautifulSoup抓取到的每个href分别赋值给独立变量,例如link1、link2、link3……。我当前的函数代码如下:
def board_list(): html = driver.page_source soup=BeautifulSoup(html, "html.parser") for link in soup.findAll('a', {'class': 'board-tile'}): href = driver.current_url+link.get('href') title = link.string print(title) print(href)请指导我实现该需求。
嘿,我来帮你搞定这个需求!其实要把每个抓取到的href赋值给独立变量(link1、link2...),有两种常见的实现方式,下面给你详细说明:
方法一:使用字典存储(推荐)
这种方式比直接创建一堆独立变量更灵活、易维护,尤其是当你不确定会抓取到多少个链接的时候。你可以把每个href和对应的title存入字典,用link1、link2这种格式作为字典的键:
def board_list(): html = driver.page_source soup = BeautifulSoup(html, "html.parser") links_dict = {} # 存储所有链接的字典 titles_dict = {} # 可选:单独存储标题的字典 # 用enumerate获取从1开始的索引,用来命名link1、link2 for idx, link in enumerate(soup.findAll('a', {'class': 'board-tile'}), start=1): href = driver.current_url + link.get('href') title = link.string # 将链接和标题存入字典 links_dict[f'link{idx}'] = href titles_dict[f'title{idx}'] = title print(title) print(href) # 返回字典,方便后续调用 return links_dict, titles_dict # 调用函数获取所有链接和标题 all_links, all_titles = board_list() # 示例:访问第一个链接 print(all_links['link1']) # 示例:访问第一个标题 print(all_titles['title1'])
方法二:直接创建独立变量(不推荐,仅作参考)
如果你确实需要生成link1、link2这类独立的全局/局部变量,可以用globals()或locals()函数动态创建,但这种方式会让代码变得混乱,容易引发变量名冲突,后续调试和维护也很麻烦,不建议在生产代码中使用:
def board_list(): html = driver.page_source soup = BeautifulSoup(html, "html.parser") for idx, link in enumerate(soup.findAll('a', {'class': 'board-tile'}), start=1): href = driver.current_url + link.get('href') title = link.string # 动态创建全局变量 globals()[f'link{idx}'] = href globals()[f'title{idx}'] = title print(title) print(href) # 调用函数后,直接使用link1、title1等变量 board_list() print(link1) print(title1)
小提示
优先选择字典的方式,因为它能更好地适配链接数量的变化,也能让你更清晰地管理所有抓取到的内容,避免不必要的变量污染。
内容的提问来源于stack exchange,提问作者Borislav Jovanovic
相关产品推荐
相关产品推荐

