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

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

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

输入:用户输入下载时间范围,格式为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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WIFI模块(esp-01s)实现天气预报代码实现

目录 前言 实现图片 一、串口编程的实现 二、发送AT指令 esp01s.c esp01s.h 三、数据处理 1、初始化 2、cjson处理函数 3、核心控制代码 四、修改堆栈大小 前言 实现图片 前面讲解了使用AT指令获取天气与cjson的解析数据&#xff0c;本章综合将时间显示到屏幕 一、…

分布式锁之基于zookeeper实现分布式锁(三)

3. 基于zookeeper实现分布式锁 实现分布式锁目前有三种流行方案&#xff0c;分别为基于数据库、Redis、Zookeeper的方案。这里主要介绍基于zk怎么实现分布式锁。在实现分布式锁之前&#xff0c;先回顾zookeeper的相关知识点 3.1. 知识点回顾 3.1.1. 安装启动 安装&#xff1a…

python回溯求解电话号码组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 输入&#xff1a;digits "23" 输出&#xff1a;["ad&qu…

C语言——计算Fibonacci数列

方式一 for循环 (20位) #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int n;int a[20]{1,1};for ( n 1; n <20; n){a[n]a[n-2]a[n-1];}for ( n 0; n < 20; n){if(n%50)printf("\n");printf("%12d ",a[n]);}return 0; …

EZDML基本介绍

一、表结构设计器(EZDML) 这是一个数据库建表的小软件&#xff0c;可快速的进行数据库表结构设计&#xff0c;建立数据模型。类似大家常用的数据库建模工具如PowerDesigner、ERWIN、ER-Studio和Rational-Rose等的超级精简版。 官方下载地址&#xff1a;http://www.ezdml.com/d…

第二十章——多线程

一.线程简介 线程的特点 1.进程是资源分配的最小单位&#xff0c;线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 二.创建线程 1.继承Thread类 1.Thread类是java.lang包中的一个类&#xff0c;从这个类实例化的对象代表线程&#xff0c;程序员启动一…

Python小技巧:探索函数调用为何加速代码执行

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python 作为一种解释型语言&#xff0c;其执行速度相对于编译型语言可能会较慢。然而&#xff0c;在Python中&#xff0c;通常观察到代码在函数中运行得更快的现象。这个现象主要是由于函数调用的内部优化和解释…

二十一、数组(6)

本章概要 数组排序Arrays.sort的使用并行排序binarySearch二分查找parallelPrefix并行前缀 数组排序 根据对象的实际类型执行比较排序。一种方法是为不同的类型编写对应的排序方法&#xff0c;但是这样的代码不能复用。 编程设计的一个主要目标是“将易变的元素与稳定的元素…

PLC:200smart

PLC&#xff1a;200smart 第十章、数据类型、数据存储1、数据类型1.1、有符号数1.2、有符号数 2、传送指令 第十一章、比较指令、整数、浮点数的运算1、比较指令1、运算指令1.1、浮点数运算1.2、整数运算 第十章、数据类型、数据存储 1、数据类型 数据类型分为两大类 无符号数…

Cream&Me 鲜奶油饼屋广州首店正式开业!

11月16日&#xff0c;Cream&#xff06;Me 鲜奶油饼屋在广州K11首店正式开业&#xff01; Cream&#xff06;Me鲜奶油饼屋与之前广州人气日式甜品品牌【KNOTKNOT珞珞】同属同一个团队打造&#xff0c;于2022年起筹备&#xff0c;首店于广州K11商场。C&#xff06;M以生日蛋糕日…

Vue3的项目创建到启动

Vue3的项目创建 检查node版本创建 npm init vuelatest 安装依赖 项目启动 启动成功

springcloud进销存管理系统源码

开发说明&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 后台管理&#xff1a; 统计分析&#xff1a;查看产品&#xff0c;采购&#xff0c;销售数量&#xff1b;统计近…

2023年【化工自动化控制仪表】考试资料及化工自动化控制仪表新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 化工自动化控制仪表考试资料参考答案及化工自动化控制仪表考试试题解析是安全生产模拟考试一点通题库老师及化工自动化控制仪表操作证已考过的学员汇总&#xff0c;相对有效帮助化工自动化控制仪表新版试题学员顺利通…

AutoSAR Classic Platform和Adaptive Platform 区别

概述 本文主要内容分为两章节。第一章节简要介绍了AUTOSAR的软件架构&#xff0c;设计理念以及方法论&#xff0c;对Classic Platform和Adaptive Platform做了简单的比较。第二章主要介绍了Adaptive Platform的特性。 第一章 AUTOSAR架构介绍 AUTOSAR(AUTomotive Open Syste…

解决苹果手机iphone手机强制重启

强制关机&#xff1a; 方法1.同时按住左侧的&#xff0c;- 键中的一个和右侧的电源键 方法2.点击桌面的悬浮键–设备–更多–重新启动

Jquery动画特效

1&#xff0c;Jquery提供的特效方法 2&#xff0c;实例代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

小程序如何进行一键修复

在使用小程序过程中&#xff0c;难免会遇到一些问题&#xff0c;比如程序崩溃、功能异常等等。这时&#xff0c;版本一键修复就显得尤为重要了。下面&#xff0c;我们就来介绍一下小程序如何进行版本一键修复。 一、什么是版本一键修复&#xff1f; 版本一键修复是指在小程序…

【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络损失函数模块解析

【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络损失函数模块解析 文章目录 【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络损失函数模块解析前言PM定位模块损失函数FM聚焦模块损失函数总结 前言 在详细解析PFNet代码之前&#xff0c;首要任务是成功运行PF…

会声会影2024旗舰版系统配置要求及格式支持

会声会影2024旗舰版是一款广受欢迎的视频编辑软件&#xff0c;它的最新版本&#xff0c;会声会影2023&#xff0c;已经发布。在这篇文章中&#xff0c;我们将探讨会声会影2024旗舰版系统配置要求及格式支持 会声会影2024是一款专业的视频剪辑软件&#xff0c;能够帮助用户制作高…

vue+uniapp校园寻物失物招领平台 微信小程序1f6z5

系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员菜单来管理后台系统。主要功能有&#xff1a;首页、个人中心、用户管理、物品分类管理、物品信息管理、物品归还管理、留言板管理、系统管理等功能。管理员用例如图3-7所示。 对于本网上失物招领小程序…