以下是一个示例代码,可以爬取人民日报指定时间范围内的文章,并根据关键字过滤和下载相关文章。代码中使用了 requests 库和 BeautifulSoup 库来进行网页爬取和解析。

import requests
from bs4 import BeautifulSoup
import os
from datetime import datetime, timedelta

def crawl_articles(start_date, end_date, keyword):
    # 创建保存文章的文件夹
    save_path = f'./{start_date}_{end_date}_{keyword}'
    os.makedirs(save_path, exist_ok=True)
    
    # 构造日期列表
    date_list = []
    current_date = start_date
    while current_date <= end_date:
        date_list.append(current_date)
        current_date += timedelta(days=1)
    
    total_articles = 0
    correct_articles = 0
    
    # 遍历日期列表
    for date in date_list:
        # 构造日期对应的URL
        url = f'http://paper.people.com.cn/rmrb/html/{date.strftime('%Y-%m/%d')}/nbs.D110000renmrb_01.htm'
        
        # 请求网页内容
        response = requests.get(url)
        response.encoding = 'utf-8'
        html = response.text
        
        # 解析网页内容
        soup = BeautifulSoup(html, 'html.parser')
        articles = soup.find_all('a')
        
        # 遍历文章链接
        for article in articles:
            article_url = article.get('href')
            if article_url and 'content' in article_url:
                # 请求文章内容
                article_response = requests.get(article_url)
                article_response.encoding = 'utf-8'
                article_html = article_response.text
                
                # 解析文章内容
                article_soup = BeautifulSoup(article_html, 'html.parser')
                article_content = article_soup.find('div', class_='text_c').get_text()
                
                # 判断是否包含关键字
                if keyword in article_content:
                    # 保存文章到文件
                    with open(f'{save_path}/{total_articles}.txt', 'w', encoding='utf-8') as f:
                        f.write(article_content)
                    
                    correct_articles += 1
                total_articles += 1
    
    # 计算爬取文章的正确性比率
    accuracy = correct_articles / total_articles if total_articles > 0 else 0
    
    return total_articles, accuracy

if __name__ == '__main__':
    # 输入开始时间、结束时间和关键字
    start_date_str = input('请输入开始时间(格式:YYYY-MM-DD):')
    end_date_str = input('请输入结束时间(格式:YYYY-MM-DD):')
    keyword = input('请输入关键字:')
    
    # 将时间字符串转换为datetime对象
    start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date()
    end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date()
    
    # 爬取文章并获取结果
    total_articles, accuracy = crawl_articles(start_date, end_date, keyword)
    
    # 输出结果
    print(f'爬取文章数量:{total_articles}')
    print(f'正确性比率:{accuracy}')

在运行该代码时,会要求输入开始时间、结束时间和关键字。然后,它会爬取人民日报指定时间范围内的文章,并根据关键字过滤和下载相关文章。最后,它会在窗口中显示爬取的文章数量和爬取文章的正确性比率。

Python 爬取人民日报文章:自定义时间范围、关键字过滤和下载

原文地址: https://www.cveoy.top/t/topic/qptr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录