BeautifulSoup查找含NEXT文本的a标签匹配失败问题咨询
问题原因
- 变量名不匹配:你定义的正则表达式存储在
next_regex变量中,但find_all调用时传入的是未定义的nextpg_regex,首先就会触发变量未定义报错,即使忽略报错也拿不到正确的匹配规则 - 匹配逻辑错误:你把包含NEXT的正则规则用在了
href属性过滤上,但是目标a标签的href值是/department/office/pg2,根本不包含NEXT字符串,NEXT是a标签的文本内容,完全匹配错了位置。
解决方法
方案1:按a标签文本内容匹配
适合class不固定、下一页按钮文本固定的场景:
import re from bs4 import BeautifulSoup import urllib.request parser = "lxml" html_bodySoup = BeautifulSoup(urllib.request.urlopen(url), parser) # 匹配文本包含NEXT的a标签,re.IGNORECASE可选,避免大小写不匹配 links = html_bodySoup.find_all('a', string=re.compile(r'NEXT', re.IGNORECASE)) # 提取href属性 for link in links: print(link.get('href'))
方案2:按class属性匹配更稳定
如果下一页按钮的class固定,不需要正则也能精准匹配,抗干扰性更强:
parser = "lxml" html_bodySoup = BeautifulSoup(urllib.request.urlopen(url), parser) # 多class匹配用列表传入参数 links = html_bodySoup.find_all('a', class_=['pg-normal', 'pg-bton']) for link in links: # 加一层文本校验,避免匹配到同class的其他按钮 if 'NEXT' in link.get_text(): print(link.get('href'))
内容的提问来源于stack exchange,提问作者Varsh
相关产品推荐
相关产品推荐

