python爬虫实习找工作练习测试(以下内容仅供参考学习)

news2024/12/24 8:49:17

要求:获取下图指定网站的指定数据

空气质量状况报告-中国环境监测总站

输入:用户输入下载时间范围,格式为2022-10

输出:将更新时间在2022年10月1日到31日之间的文件下载到本地目录(可配置),并将下载的标题列表逐行打印在控制台console中

完成标准:

程序正常运行

import requests
from lxml import etree
from urllib.parse import urljoin
from datetime import datetime

def download_files(start_date,end_date):
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    base_url = "http://www.cnemc.cn/jcbg/kqzlzkbg/index"
    page=0
    while True:
        if page==0:
            url=f"{base_url}.shtml"
        else:
            url=f"{base_url}_{page}.shtml"
    # url = "http://www.cnemc.cn/jcbg/kqzlzkbg/index.shtml"
        response = requests.get(url, headers=headers)
        if response.status_code!=200:
            break
        response.encoding = response.apparent_encoding
        page_text = response.text
        html = etree.HTML(page_text)
        divs = html.xpath('//*[@id="contentPageData"]/li')
        for i in divs:

            # 使用 XPath 定位到 <a> 标签并提取文本
            title = i.xpath('.//a/text()')  # 获取第一个匹配元素的文本

            # 使用 XPath 定位到 <span class="txt_time"> 标签并提取文本
            date_str = i.xpath('.//span[@class="txt_time"]/text()')

            if title and date_str:
                title = title[0].strip()
                date = datetime.strptime(date_str[0].strip(),'%Y-%m-%d')
                if start_date <= date <= end_date:
                    a_tag = i.find('.//a')
                    link = a_tag.get('href') if a_tag is not None else None
                    print(f'下载标题:{title}')
                    print(link)
                    base_link='http://www.cnemc.cn/jcbg/kqzlzkbg/'
                    full_link=urljoin(base_link,link)
                    print(full_link)
                    response_son = requests.get(full_link, headers=headers)
                    response_son.encoding = response_son.apparent_encoding
                    page_text_son=response_son.text
                    # print(page_text_son)
                    html_son = etree.HTML(page_text_son)
                    divs_son=html_son.xpath('/html/body/div[1]/div[5]/div/div[1]')[0]
                    # print(divs_son)        #/html/body/div[1]/div[5]/div/div[1]
                    a_tag_son = divs_son.find('.//a')
                    link_file = a_tag_son.get('href') if a_tag_son is not None else None
                    print(link_file)
                    if "http://www.cnemc.cn/" not in link_file:
                        link_file="http://www.cnemc.cn/jcbg/kqzlzkbg/"+str(start_date.year)+str(start_date.month)+'/'+link_file.lstrip('./')
                        print(link_file)
                    file_path=f"./downloads/{title}.pdf"
                    response_file=requests.get(link_file)
                    if response_file.status_code==200:
                        with open(file_path,'wb') as f:
                            f.write(response_file.content)
                        print("文件下载成功,保存至:", file_path)
                    else:
                        print("下载失败,状态码:", response_file.status_code)
        page+=1
if __name__=="__main__":
    start_date=datetime(2016,4,1)
    end_date=datetime(2016,4,30)
    download_files(start_date,end_date)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1261032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Rust中编写自动化测试

1.摘要 Rust中的测试函数是用来验证非测试代码是否是按照期望的方式运行的, 测试函数体通常需要执行三种操作:1.设置任何所需的数据或状态;2.运行需要测试的代码;3.断言其结果是我们所期望的。本篇文章主要探讨了Rust自动化测试的几种常见场景。 2.测试函数详解 在Rust项目工…

图像去噪——k-Sigma变换,模拟增益,噪声方差

目录 一、k-Sigma变化k-Sigma变换定义式定义式参数解析 二、模拟增益三、噪声方差 一、k-Sigma变化 k-Sigma变换是一种用于图像去噪的方法&#xff0c;它的主要思想是通过一个特定的线性转换&#xff0c;将训练数据从ISO-dependent的域名转换到ISO-independent的域上。这个转换…

QtCreator创建的文件复制到VS下报错

报错1&#xff1a; 错误 C2447 “{”: 缺少函数标题(是否是老式的形式表?) (编译源文件 myselectpoint.cpp) DataTypeLib e:\qtnewproject\linuxversion\videointerpretationanddataprocesssystem_vs\jwycfsoftware\datatypelib\allstructdefine.h 117 解…

快速开发出一个公司网站

问题描述&#xff1a;参加一个创业活动&#xff0c;小组要求做一个公司网站&#xff0c;简单介绍一下自己公司的业务。需要快速完成。 问题解决&#xff1a;从网上找一个网站模板&#xff0c;类似于做PPT&#xff0c;搭建一个网站即可。 这里推荐的是京美建站、wordpress、he…

车规激光雷达再商用车前装市场的应用

1、商用车需要什么样的激光雷达 2、如何实现车规级&#xff08;商用车&#xff09;的激光雷达 3、激光雷达安装部署方案

PHP TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据

本示例使用设备&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) <?php header("content-type:text/html;charsetGBK");set_time_limit(0); $port39169; //监听端口if(($socket socket_create(AF_INET, SOCK…

pycharm 怎么切换Anaconda简单粗暴

&#xff08;1&#xff09;创建一个环境 &#xff08;2&#xff09;选择一下自己conda的安装路径中conba.exe (3)选择存在的环境&#xff0c;一般会自动检测到conda创建有哪些环境&#xff0c;导入就行

C++二分查找视频教程:两数之和

作者推荐 利用广度优先或模拟解决米诺骨牌 本文涉及的基础知识点 二分查找算法合集 题目 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 n…

单片机学习11——矩阵键盘

矩阵键盘&#xff1a; 这个矩阵键盘可以接到P0、P1、P2、P3都是可以的。 使用矩阵键盘是能节省单片机的IO口。 P3.0 P3.1 P3.2 P3.3 称之为行号。 P3.4 P3.5 P3.6 P3.7 称之为列号。 矩阵键盘检测原理&#xff1a; 1、检查是否有键按下&#xff1b; 2、键的抖动处理&#xf…

XIAO ESP32S3之套件简绍

很高兴收到柴火创客空间寄来的XIAO ESP32S3开发套件。 一、套件介绍 1、电路板部分 一块XIAO ESP32S3主板、一块摄像头接口板&#xff08;可接SD卡&#xff09;&#xff0c;一根2.4G天线。 2、配件部分 一根USB-A转TypeC数据线、一个USB3.0转TypeC转接头、一个SD卡读卡器&am…

集动作捕捉与表情捕捉的系统,怎么用于动画制作?

对于传统动画制作来说&#xff0c;将要处理数字人的动作与表情&#xff0c;最原始的方式是打关键帧&#xff0c;通过关键帧的形式来展现数字人的弹跳、行走、奔跑等动作&#xff0c;但这种制作方式往往时间长&#xff0c;成本高&#xff0c;效率低。而一个集动作捕捉与表情捕捉…

spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查

一、背景 在今天上午的时候&#xff0c;突然收到大量的sentry报错&#xff0c;都是关于redis连接超时的警告。 首先想到的是去查看redis的监控&#xff0c;发现那个时间段&#xff0c;redis的请求数剧增&#xff0c;cpu使用率和带宽都陡增双倍。 下面的是redis监控的cpu情况 …

【MySql】14- 实践篇(十二)-grant权限/分区表/自增Id用完怎么办

文章目录 1.grant之后要跟着flush privileges吗&#xff1f;1.1 全局权限1.2 db 权限1.3 表权限和列权限1.4 flush privileges 使用场景 2. 要不要使用分区表?2.1 分区表是什么?2.2 分区表的引擎层行为2.3 分区策略2.4 分区表的 server 层行为2.5 分区表的应用场景 3. 自增Id…

高效视频剪辑:按指定时长批量分割视频,释放无尽创意

随着数字媒体技术的不断发展&#xff0c;视频剪辑已经成为日常生活中不可或缺的一部分。无论是制作电影、电视剧&#xff0c;还是创意生活短视频&#xff0c;视频剪辑都扮演着重要的角色。然而&#xff0c;对于许多非专业人士来说&#xff0c;视频剪辑可能是一项复杂而耗时的任…

数字营销:概述和类型

数字营销无处不在。公司已经开始采用密集的数字营销活动来接触目标受众。从社交媒体句柄到网站&#xff0c;数字营销彻底改变了互联网时代产品和服务的营销和推广方式。本文将详细讨论数字营销的范围和类型。 什么是数字营销&#xff1f; 数字营销使用社交媒体、电子邮件、网…

免费SSL证书有效期只有90天?太短?

随着网络安全问题日益受到重视&#xff0c;SSL证书成为了网站安全的必需品。然而&#xff0c;在许多情况下&#xff0c;免费提供的SSL证书往往只有90天的有效期&#xff0c;这种期限对于很多用户来说显得过于短暂。 首先&#xff0c;我们要理解为什么 SSL 证书的有效期设定为90…

P8A003-系统加固-系统管理员账户安全

【预备知识】 Administrator 原意为管理人或行政官员或遗产管理人&#xff0c;在计算机名词中&#xff0c;它的意思是系统超级管理员或超级用户。但是在Windows系统中此用户名只在安全模式中使用。 【实验步骤】 网络拓扑&#xff1a;server2008-basic windows server 2008 …

Ps:转换路径

在 Photoshop 中&#xff0c;路径 Path是一种非常灵活的手段&#xff0c;可以被转换成多种不同的形式&#xff0c;以适应各种不同的设计和编辑需求。 ◆ ◆ ◆ 将路径转换为选区 方法一&#xff1a; 在使用路径类工具的状态下&#xff0c;在路径上右键选择“建立选区” Make …

WordPress:构建强大的网站和博客的完美选择

WordPress&#xff1a;构建强大的网站和博客的完美选择 一、WordPress 简介1.1 WordPress 介绍1.2 WordPress 优势 二、部署LNMP环境2.1 前提条件2.2 关闭防火墙和SELinux2.3 安装Nginx2.4 安装MySQL2.5 安装PHP2.6 配置Nginx2.7 配置MySQL2.8 配置PHP2.9 测试访问LNMP平台 三、…

3D模型纹理集合并【Python|C#】

使用 Substance Painter 时&#xff0c;将模型的各个部分分成不同的纹理集非常有用。 这可以帮助遮罩&#xff0c;或者只是保持层栈干净。 不幸的是&#xff0c;Painter 无法将多个纹理集中的所有贴图导出为单个图集&#xff0c;即使在创建单独对象的 UV 时考虑到了这一点。 显…