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

如何用Python网页爬取获取网站文章标题与主题?附代码求助

解决Python爬虫获取文章标题的问题

嘿,作为HTML新手碰到爬虫标签匹配的问题太正常啦!我先帮你梳理下现有代码的坑,再给你调整后的可运行代码,顺便把每个步骤讲明白,方便你理解~

先说说你原有代码的潜在问题

  • 你用的urllib2是Python2的专属库,现在主流的Python3已经把它拆分成urllib.request和urllib.error了,直接用会报错
  • 单纯切换h1-h4标签不管用,大概率是目标网页的文章标题没直接用这些标签,而是嵌套在带特定class/id的div、a标签里
  • 代码里没处理“找不到对应标签”的情况,万一匹配不到内容会直接抛出异常

调整后的正确代码(Python3版本)

from urllib.request import urlopen
from urllib.error import HTTPError, URLError
from bs4 import BeautifulSoup

def get_article_titles(target_url):
    try:
        # 建立网页连接并获取HTML内容
        html = urlopen(target_url)
        # 用lxml解析器解析HTML(比默认解析器更快更稳定,需先执行`pip install lxml`安装)
        soup = BeautifulSoup(html, 'lxml')
        
        # 重点:这里要根据目标网页的实际结构调整选择器!
        # 举几个常见场景的例子:
        # 1. 标题在class为"article-title"的h2标签里:title_tags = soup.find_all('h2', class_='article-title')
        # 2. 标题在class为"post-link"的a标签里:title_tags = soup.select('a.post-link')
        # 3. 先抓所有h1-h4标签(通用兜底方案):
        title_tags = soup.find_all(['h1', 'h2', 'h3', 'h4'])
        
        # 提取标签文本,同时过滤掉空内容
        titles = [tag.get_text(strip=True) for tag in title_tags if tag.get_text(strip=True)]
        
        if not titles:
            print("没找到任何文章标题!建议打开目标网页F12检查标题的实际标签结构~")
            return []
        
        return titles
    
    except HTTPError as e:
        print(f"请求网页出错啦:{e}")
        return []
    except URLError as e:
        print(f"网络连接有问题:{e}")
        return []
    except Exception as e:
        print(f"遇到其他意外错误:{e}")
        return []

# 替换成你要爬的目标网页URL
your_url = "https://你的目标网页地址"
titles = get_article_titles(your_url)

# 打印抓取到的标题
for index, title in enumerate(titles, 1):
    print(f"{index}. {title}")

关键知识点拆解

  • 库的适配:Python3对urllib库做了拆分,所以要导入urllib.request和urllib.error替代原来的urllib2
  • 解析器选择:lxml解析器处理复杂HTML更靠谱,需要提前用pip install lxml安装
  • 标签选择的核心:这是你之前失败的关键!一定要用浏览器F12开发者工具定位标题的真实结构:右键标题→检查,看它的标签、class/id属性,再对应调整代码里的选择器
  • 文本处理:get_text(strip=True)会自动去掉文本前后的空格、换行符,避免拿到无效内容

给HTML新手的小技巧

  1. 永远先看网页源代码(右键→查看网页源代码),如果能直接看到标题,说明是静态页面,用上面的代码就搞定;如果看不到,可能是动态加载的,那得用selenium这类工具
  2. 测试时可以先打印soup.prettify(),看看解析后的HTML结构,确认标签是否匹配
  3. 多尝试find_all和select两种选择器:find_all适合按标签+属性匹配,select支持CSS选择器,更灵活

内容的提问来源于stack exchange,提问作者A.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:11