You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python和BeautifulSoup从嵌套HTML标签中提取href链接?

如何从BeautifulSoup结果中正确提取分页href链接?

我来帮你捋清楚问题出在哪,以及怎么解决:

首先,分析你遇到的问题原因:

  1. 直接调用pagesize_content.ul.li.a['href']报错:因为soup.find_all()返回的是一个元素列表(你输出里能看到有两个div.pull-right),列表不能直接访问ul这类属性。而且第一个div是按钮组,根本没有ul,只有第二个div才是分页组件。
  2. 查找class="fa fa-angle-double-right"的a标签返回空:这个class其实是属于<em>标签的,不是<a>标签的class,所以自然找不到。

解决方案:先定位到正确的分页div,再提取链接

方法1:精准定位分页div(推荐)

直接找包含ul.pagination的那个div.pull-right,避免依赖索引:

from bs4 import BeautifulSoup as bs

soup = bs(html, 'html.parser')
# 定位到包含分页ul的div
pagination_div = soup.find('div', class_='pull-right', ul={'class': 'pagination'})

# 提取所有有效的分页href(排除javascript链接)
all_page_links = [a['href'] for a in pagination_div.find_all('a', href=True) if not a['href'].startswith('javascript')]
print(all_page_links)
# 输出:['/Test/country?page=1', '/Test/country?page=2', '/Test/country?page=3', '/Test/country?page=4', '/Test/country?page=4']

方法2:从find_all结果中取目标div

如果你确定分页div是第二个,可以直接取列表索引[1]

pagesize_content = soup.find_all('div', class_="pull-right")
pagination_div = pagesize_content[1]

# 同样提取所有链接
all_page_links = [a['href'] for a in pagination_div.find_all('a', href=True) if 'javascript' not in a['href']]
print(all_page_links)

如果你只想提取「最后一页」的链接

可以通过文本内容或em标签来定位:

# 方法A:通过"Last"文本定位
last_link = pagination_div.find('li', text=lambda t: t and 'Last' in t.strip()).a['href']

# 方法B:通过em标签的class定位(因为Last按钮里的em有fa-angle-double-right类)
last_link = pagination_div.find('em', class_='fa fa-angle-double-right').parent['href']

print(last_link)
# 输出:/Test/country?page=4

内容的提问来源于stack exchange,提问作者thangaraj1980

火山引擎 最新活动