python爬虫实战:爬取纽约时报中文网站首页新闻

1,065 阅读1分钟

使用指南

  1. 本代码用于爬取 纽约时报中文网 新闻网站首页的新闻文章(包括新闻标题,新闻链接,和发布日期三个数据)
  2. Python3 环境下运行本代码,同时保证运行环境中安装有 requestspandas 库。
  3. 运行结果保存为 "纽约时报中文网.csv" 文件,路径位于脚本同路径下(如有需要可以修改代码中 filename 的值,设置文件名和存储路径)
  4. 使用此爬虫前,请确保您的网络可以正常访问 纽约时报中文网 网站,否则爬虫运行会报错失败。
  5. 本爬虫仅供学习交流使用,请勿用于商业用途。

源码

import requests
import json
from bs4 import BeautifulSoup
import pandas as pd
import time

def fetchUrl(url):

    header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
    }

    r = requests.get(url, headers = header)
    r.encoding = r.apparent_encoding
    return r.text

def parseHtml(html):

    bsObj = BeautifulSoup(html, "lxml")
    temp = bsObj.find_all("h3")

    retData = []

    for item in temp:
        link = "https://cn.nytimes.com" + item.a["href"]
        title = item.a.text
        dateTmp = item.a["href"].split("/")[2]
        date = dateTmp[0:4] + "-" + dateTmp[4:6] + "-" + dateTmp[6:8]

        print(date, title, link)
        retData.append([date, title, link])

    return retData

def saveData(data, filename):

    dataframe = pd.DataFrame(data)
    dataframe.to_csv(filename, mode='a', index=False, sep=',', header=False)


if __name__ == "__main__":

    # 纽约时报中文网

    url = "https://cn.nytimes.com/"
    html = fetchUrl(url)
    data = parseHtml(html)
    saveData(data, "纽约时报中文网.csv")