Python BeautifulSoup如何爬取表格td标签内包含的a标签链接
网页抓取td标签文本及内部a链接的实现方法
你原有代码中将row_td转为字符串后二次解析的操作会丢失原本的DOM标签结构,导致无法提取a标签链接,直接基于原始的td元素对象操作即可实现同时提取文本和内部链接,修改后的代码如下:
from urllib.request import urlopen from urllib.parse import urljoin from bs4 import BeautifulSoup base_url = "http://eecs.qmul.ac.uk/postgraduate/programmes/" html = urlopen(base_url) soup = BeautifulSoup(html, 'lxml') table_list = [] rows = soup.find_all('tr') for row in rows: tds = row.find_all('td') row_data = [] for td in tds: # 提取td文本 cell_text = td.get_text(strip=True) # 提取td内部a标签的链接 cell_link = '' a_tag = td.find('a') if a_tag and a_tag.has_attr('href'): # 相对路径转绝对路径 cell_link = urljoin(base_url, a_tag['href']) # 每个单元格存为(文本, 链接)的元组,也可以根据需要改成字典 row_data.append((cell_text, cell_link)) table_list.append(row_data) # 打印查看结果 for row in table_list: print(row)
关键改动说明
- 取消了td列表转字符串后二次解析的冗余操作,直接操作原始的td元素,保留了完整的标签结构
- 每个单元格单独处理,同时存储文本内容和对应链接,没有链接的单元格链接字段赋值为空字符串
- 新增了相对路径转绝对路径的逻辑,避免爬取到的相对链接无法直接使用
- 你也可以根据自己的需求调整存储结构,比如将每行数据存为字典,或者只在有a标签的单元格存储链接
内容的提问来源于stack exchange,提问作者Aida Farah
相关产品推荐
相关产品推荐

