You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python+BeautifulSoup在网页爬取中精准选取指定元素

解决BeautifulSoup精准选取HTML元素的问题

先说说你当前代码里的几个问题:

  • 重复发起了两次HTTP请求,完全没必要,一次请求就能拿到响应文本和状态码
  • 错误地对字符串调用readlines()方法,thesis_infos.text是字符串类型,根本没有这个方法
  • 通过文本行索引提取内容太依赖文本格式,只要HTML结构稍微调整,结果就会出错,应该直接定位目标标签

下面是修正后的代码,精准实现你要的需求:

import requests
from bs4 import BeautifulSoup

url = line.strip()
# 只发起一次请求,同时获取响应内容和状态码
response = requests.get(url, headers=headers)
r_html = response.text
r_html_sc = response.status_code 

soup = BeautifulSoup(r_html, "html.parser") 
# 定位class为span16的div,class_是BeautifulSoup里专门处理class属性的写法(避免和Python关键字冲突)
thesis_infos = soup.find('div', class_="span16") 

author = ""
year = ""

if thesis_infos is not None:
    # 获取div下所有h3标签,取第1个(索引0)
    h3_tags = thesis_infos.find_all('h3')
    if len(h3_tags) > 0:
        author = h3_tags[0].get_text(strip=True)
    
    # 获取div下所有h6标签,取第2个(索引1)
    h6_tags = thesis_infos.find_all('h6')
    if len(h6_tags) > 1:
        year = h6_tags[1].get_text(strip=True)

# 输出结果
print(f"作者: {author}")
print(f"时间: {year}")

关键用法说明:

  • find_all('标签名')会返回目标容器下所有对应标签的列表,通过索引就能精准定位第n个元素
  • get_text(strip=True)可以提取标签内的文本,同时自动去除前后的空白字符,比直接用.text.strip()更灵活
  • 增加了列表长度判断,避免因为标签数量不足导致的索引越界报错

内容的提问来源于stack exchange,提问作者M. Zain Aldin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:15:39