Python网页爬取:按行提取表格数据及优化子页面链接爬取
解决方案
问题1:高效获取子页面链接(无需正则)
直接从页面的链接元素中提取完整URL或ID参数,比正则更高效且易维护:
- 定位页面中所有指向企业详情页的
<a>标签(通常链接包含details?id=标识) - 直接通过
a.get('href')获取完整链接,或用urllib.parse解析链接提取ID参数
示例代码片段:
from urllib.parse import urlparse, parse_qs # 假设已获取列表页的soup对象 for a_tag in soup.find_all('a', href=True): href = a_tag['href'] if 'details?id=' in href: # 直接拼接完整链接(适配相对路径) full_url = f"https://www.afm.nl{href}" if href.startswith('/') else href # 或者单独提取ID parsed_url = urlparse(href) page_id = parse_qs(parsed_url.query)['id'][0] # 后续处理该链接/ID
问题2:按行提取表格数据
你的代码循环层级错误,需先遍历表格的每一行<tr>,再处理行内单元格,将每行数据存入单独列表:
修正后的代码:
# Scrape and find table content table_results = soup.find_all('tbody') register = [] # 遍历每个tbody容器 for tbody in table_results: # 遍历tbody内的每一行 for tr in tbody.find_all('tr'): row_data = [] # 处理当前行的每个单元格 for td in tr.find_all('td'): span = td.find('span', class_='cc-mobile-title') if span: # 清理文本空白后存入 text_content = span.next_sibling.strip() row_data.append(text_content) # 跳过空行,将有效行数据加入结果列表 if row_data: register.append(row_data) print(register)
说明:
- 先遍历
<tbody>,再遍历每个<tbody>下的<tr>(即表格行) - 每行创建独立的
row_data列表存储该行单元格内容 - 最终
register为二维列表,每个子列表对应表格的一行数据
内容的提问来源于stack exchange,提问作者Laura1608
相关产品推荐
相关产品推荐

