新手求助:用Python+BeautifulSoup提取网页指定文本后的内容
解决思路与代码示例
方法一:基于节点定位(推荐)
这种方式直接通过HTML结构定位目标内容,稳定性更强,不受网页换行变化影响。
步骤:
- 修正请求URL(你当前代码里的URL是
Aiuto,需要改成目标页面Allarme) - 找到包含
Gittata:的<strong>标签 - 获取该标签的下一个兄弟节点文本,就是目标内容
代码示例:
import requests from bs4 import BeautifulSoup url = "https://dungeonsanddragons.fandom.com/it/wiki/Allarme" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 定位包含"Gittata:"的strong标签 gittata_label = soup.find('strong', string='Gittata:') if gittata_label: # 提取标签后的文本并去除多余空格 gittata_value = gittata_label.next_sibling.strip() print(gittata_value) # 输出结果:9 metri
方法二:按行提取(不推荐,稳定性差)
如果一定要用“打印第N行文本”的方式,可先拆分网页内容为行,再定位目标行并提取内容,但这种方式依赖网页源码的换行结构,一旦网页更新换行变化就会失效。
代码示例:
import requests import re url = "https://dungeonsanddragons.fandom.com/it/wiki/Allarme" response = requests.get(url) # 将网页内容按换行符拆分为行列表 lines = response.text.split('\n') # 遍历找到包含"Gittata:"的行 target_line_idx = None for idx, line in enumerate(lines): if 'Gittata:' in line: target_line_idx = idx break if target_line_idx is not None: # 从目标行中用正则提取<strong>标签内的内容 match = re.search(r'Gittata:</strong>\s*<strong>(.*?)</strong>', lines[target_line_idx]) if match: print(match.group(1)) # 输出结果:9 metri
注意事项
- 方法一的节点定位方式更健壮,优先使用;方法二仅作为特殊场景下的备选方案。
- 确保请求的URL是目标页面
Allarme,而非你代码里的Aiuto。
内容的提问来源于stack exchange,提问作者Luca Valdisturli
相关产品推荐
相关产品推荐

