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

Python华盛顿邮报爬虫代码无输出问题排查

网页抓取Python代码无输出问题排查

我来帮你梳理下代码里的问题,首先你的调用方式确实存在错误,还有几个潜在bug共同导致了无输出的情况:

1. newspaper_parser调用参数错误

你写的c = neighbor.newspaper_parser(b)属于多余传参!原类里的newspaper_parser方法不需要接收链接参数,它直接使用实例的self.links属性(也就是get_pages方法填充的内容)。你传了b进去,但方法里根本没用到这个参数,正确的调用方式应该是:

c = neighbor.newspaper_parser()

2. 日期检查逻辑可能直接终止爬取

在WashPostScraper的get_pages方法里,一旦遇到不满足日期范围的文章,你直接设置stop=True并break循环——如果第一页里就有不符合日期的文章,整个爬取会直接停止,self.links自然为空。更关键的是:华盛顿邮报的时间戳文本格式可能是相对时间(比如"2 hours ago")或特殊格式,dateutil.parser.parse未必能正确解析成datetime对象,一旦解析失败,check_dates会返回False,直接触发停止逻辑,导致没有链接被收集。

你可以给check_dates加个调试打印,确认日期解析是否正常:

def check_dates(self, date):
    try:
        page_date = parse(date)
        print(f"解析到的日期: {page_date}, 目标范围: {self.dateStart} 到 {self.dateEnd}")
        if page_date >= self.dateStart and page_date <= self.dateEnd:
            return True
        return False
    except Exception as e:
        print(f"日期解析失败: {e}, 原始日期文本: {date}")
        return False

3. 页面元素选择器可能失效

你依赖的pb-feed-item、pb-timestamp、ng-binding这些类名可能已经被华盛顿邮报更新了,导致soup.find_all找不到任何元素,直接触发stop=True,最终self.links为空。你可以先打印soup.prettify()查看当前页面结构,或者用浏览器开发者工具重新定位目标元素的选择器。

4. 其他潜在问题

  • write_to_csv方法里用open(file_name, 'wb')是Python2的写法,Python3中csv.DictWriter需要文本模式,应该改成open(file_name, 'w', newline='', encoding='utf-8'),后续调用时才不会报错。
  • newspaper_parser的异常处理太粗糙:article.build()失败时只sleep60秒就跳过,没有重试逻辑也不打印错误信息,你根本不知道哪些链接处理失败了,可以增加重试和错误日志。

先重点排查日期解析和页面元素定位的问题,这大概率是导致无输出的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:27:30