IBM官网新闻爬虫代码示例

通常我们使用Python编写爬虫,常用的库有requests(发送HTTP请求)和BeautifulSoup(解析HTML)。但这里需要注意的是,在爬取任何网站之前,务必遵守该网站的robots.txt文件和相关法律法规,尊重网站的版权和隐私政策。

由于IBM网站的具体结构可能会变化,以下代码示例是一个通用的爬虫框架,用于爬取IBM官网(例如ibm.com)的某个页面。在实际使用中,需要根据目标页面的具体HTML结构进行调整。

以下就是我用 Python 的 requestsBeautifulSoup 库爬取 IBM 官网新闻页面的完整代码示例。该脚本会提取新闻标题、描述、发布日期和链接。

python 复制代码
import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime

# 配置请求头模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9"
}

def scrape_ibm_news(url):
    """爬取 IBM 新闻页面数据"""
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 查找新闻卡片容器(根据实际页面结构调整选择器)
    news_cards = soup.select('div.ibm--card > div.ibm--card__body')
    
    results = []
    for card in news_cards:
        try:
            title = card.select_one('h3.ibm--card__heading').text.strip()
            description = card.select_one('div.ibm--card__copy').text.strip()
            date_str = card.select_one('div.ibm--card__date').text.strip()
            link = card.select_one('a.ibm--card__footer')['href']
            
            # 转换日期格式(示例)
            date_obj = datetime.strptime(date_str, '%d %b %Y')
            formatted_date = date_obj.strftime('%Y-%m-%d')
            
            results.append({
                'title': title,
                'description': description,
                'date': formatted_date,
                'link': f"https://www.ibm.com{link}"
            })
        except Exception as e:
            print(f"解析错误: {str(e)}")
            continue
    
    return results

def save_to_csv(data, filename='ibm_news.csv'):
    """保存数据到CSV文件"""
    with open(filename, 'w', newline='', encoding='utf-8') as f:
        fieldnames = ['title', 'description', 'date', 'link']
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(data)

if __name__ == "__main__":
    # IBM 新闻页面URL(示例页面)
    news_url = "https://www.ibm.com/news"
    
    print("开始爬取 IBM 新闻...")
    news_data = scrape_ibm_news(news_url)
    
    if news_data:
        save_to_csv(news_data)
        print(f"成功爬取 {len(news_data)} 条新闻,已保存到 ibm_news.csv")
    else:
        print("未找到新闻数据")

关键说明:

  1. 选择器调整

    • 实际使用时需根据 IBM 网站当前 HTML 结构更新 CSS 选择器
    • 打开浏览器开发者工具(F12)检查元素
    • 示例选择器基于常见类名(如 .ibm--card
  2. 反爬虫策略

    • 使用真实 User-Agent 头
    • 添加请求延时(避免高频请求)
    python 复制代码
    import time
    time.sleep(2)  # 每次请求间隔2秒
    • 使用代理 IP(如需大规模爬取)
    python 复制代码
    proxies = {
        'http': 'http://10.10.1.10:3128',
        'https': 'http://10.10.1.10:1080',
    }
    response = requests.get(url, proxies=proxies)
  3. 数据处理

    • 日期格式转换
    • 相对链接转绝对链接
    • 错误处理避免解析中断

输出示例 (CSV 文件):

csv 复制代码
title,description,date,link
"IBM Quantum System Two now operational","IBM's next-gen quantum system goes live",2023-11-15,https://www.ibm.com/news/quantum-system-two
"IBM partners with NASA on climate research","New AI models for climate pattern analysis",2023-11-10,https://www.ibm.com/news/nasa-partnership
...

法律注意事项:

  1. 遵守 robots.txt

    复制代码
    User-agent: *
    Allow: /news/
    Disallow: /search/
  2. 尊重版权信息

  3. 限制请求频率(>2秒/请求)

  4. 勿用于商业用途

上面就是有关爬取代码的相关示例,然后在我们实际开发中还是建议使用官方 API(若有提供),IBM Developer 的 API Hub 可能有相关数据接口。

相关推荐
CHANG_THE_WORLD11 分钟前
C++ 内存模型:用生活中的例子理解并发编程
开发语言·c++·生活
武子康16 分钟前
Java-118 深入浅出 MySQL ShardingSphere 分片剖析:SQL 支持范围、限制与优化实践
java·大数据·数据库·分布式·sql·mysql·性能优化
闯闯桑24 分钟前
toDF(columns: _*) 语法
开发语言·前端·spark·scala·apache
滴滴滴嘟嘟嘟.24 分钟前
Qt图表功能学习
开发语言·qt·学习
charlie11451419139 分钟前
Android开发——初步了解AndroidManifest.xml
android·xml·开发语言·学习·安卓·安全架构
Edward.W1 小时前
用 Go + HTML 实现 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 实战)
开发语言·后端·golang
努力努力再努力wz1 小时前
【c++进阶系列】:万字详解AVL树(附源码实现)
java·运维·开发语言·c++·redis
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 基于Hadoop电商数据的可视化分析为例,包含答辩的问题和答案
大数据·hadoop·分布式
CHANG_THE_WORLD2 小时前
C++并发编程指南 std::promise 介绍与使用
java·开发语言·c++·promise
egoist20232 小时前
[linux仓库]性能加速的隐形引擎:深度解析Linux文件IO中的缓冲区奥秘
linux·运维·开发语言·缓存·缓冲区