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

如何从新闻页面抓取发布日期?现有标题爬虫需扩展功能

解决新闻爬虫提取发布日期的问题

首先,你需要调整爬取逻辑:不要直接遍历<h2>标签,而是先定位单条新闻的容器元素,再从容器内分别提取标题和发布日期——因为标题和日期属于同一条新闻的关联内容,它们的父容器是统一的。

以New Scientist的太空板块列表页为例,页面里每条新闻都被包裹在<article>标签(带有c-card类)中,发布日期则在<time>标签里(通常带有datetime属性存储标准日期格式,也可以提取标签内的文本)。

修改后的代码如下:

import requests
from bs4 import BeautifulSoup as bs

# 改为存储字典,每条新闻存标题和日期
news = []

url = 1
while url <= 100:  # 这里改成<=100更直观,避免url=100时跳出循环漏爬
    website = f"https://www.newscientist.com/subject/space/page/{url}"
    r = requests.get(
        website,
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0",
            "Referer": website
        } 
    )

    soup = bs(r.text, 'html.parser')
   
    # 定位每条新闻的容器
    news_containers = soup.find_all("article", class_="c-card")
    for container in news_containers:
        # 提取标题
        title = container.find("h2").get_text(strip=True)
        # 提取发布日期:优先取datetime属性的标准格式,或者取文本
        date_tag = container.find("time")
        if date_tag:
            # 两种方式选一个:取datetime属性(格式如2024-05-20)
            publish_date = date_tag.get("datetime", "")
            # 或者取标签内的文本(格式如May 20, 2024)
            # publish_date = date_tag.get_text(strip=True)
        else:
            publish_date = "无日期"
        
        news.append({"title": title, "publish_date": publish_date})
    
    url += 1  # 别忘了页码自增,否则会死循环!

# 打印测试前几条
for item in news[:5]:
    print(f"标题:{item['title']}\n日期:{item['publish_date']}\n")

关键修改点说明:

  • 将news改为存储字典,同时保存标题和日期信息,方便后续处理。
  • 先抓取新闻容器而非单独的标题标签,确保标题和日期对应同一条新闻。
  • 处理日期时,优先使用<time>标签的datetime属性,这个属性的格式更标准、易解析;如果需要可读性更强的文本格式,改用get_text()。
  • 修复了原代码的循环逻辑:原代码while url != 100会在url=100时直接跳出,导致第100页没爬取,改成while url <=100更合理,同时加上url +=1避免死循环(原代码里漏掉了页码自增,这会导致无限循环爬第1页)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:18