bs4库爬取天气预报
Python不仅用于网站开发,数据分析,图像处理,也常用于爬虫技术方向,最近学习了解下,爬虫技术入门一般先使用bs4库,爬取天气预报简单尝试下。
第一步:首先选定目标网站地址
网上查询,天气预报准确率高的官网是“天气网”,网址:http://www.weather.com.cn/
第二步:确定爬取目标数据
本次只是简单学习尝试下。
1,爬取-今天-天气预报(天气情况,最高温度,最低温度);
2,爬取-近7天-天气预报(日期,天气,温度,风力);
第三步:确定爬取目标数据网页元素定位
例如:今天-最高温度,页面元素定位,使用浏览器开发调试功能,按 F12 进入。
调试界面左上角箭头点击进入选择元素模式,然后从页面中选择需要查看的元素,然后可以在开发者工具元素(Elements)一栏中定位到该元素源代码的具体位置 。
查看元素属性:可从被定位的源码中查看部分,如class、src,也可在右边的侧栏中查看全部的属性,如下图位置查看
根据页面元素层级关系,确定bs4库的BeautifulSoup选择元素位置,根据元素标签,属性,层级递减,最后确定目标元素位置即可。
# 最高气温-元素位置如下:
soup.select("div.t >ul.clearfix > li > p.tem")
以此类推,确定所有需要爬取的目标元素位置。
第四步:完成代码编写
requests_bs4.py :
# -*- coding: UTF-8 -*-
# 爬取静态网页工具
import requests
import time
import re
from bs4 import BeautifulSoup
import randomdef get_html_text(url):'''@方法名称: 获取网页的html信息@中文注释: 获取网页的html信息,转换成字符串格式数据@入参:@param url str 网址@出参:@返回状态:@return 0 失败或异常@return 1 成功@返回错误码@返回错误信息@param rsp_text str 网页html信息@作 者: PandaCode辉@创建时间: 2023-09-05@使用范例: get_html_text('https://www.baidu.com/')'''try:if (not type(url) is str):return [0, "111111", "网址参数类型错误,不为字符串", [None]]# 浏览器用户信息列表user_agents = ['Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0','Opera/9.25 (Windows NT 5.1; U; en)','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)','Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12','Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9','Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7','Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0',]# 随机获取一个浏览器用户信息agent = random.choice(user_agents)# header头信息headers = {'User-Agent': agent,'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Connection': 'keep-alive','Cache-Control': 'max-age=0',}# 代理IP地址,需要找到可用的代理ip,不然无法使用# proxy = {'HTTP': 'xx.xx.xx.xx:8000', 'HTTPS': 'xx.xx.xx.xx:80'}# response = requests.get(url, headers=headers, proxies=proxy, timeout=30)# 增加随机模拟浏览器访问header头信息,提高反爬网站成功率response = requests.get(url, headers=headers, timeout=30)# print(response.status_code)response.raise_for_status()response.encoding = 'utf-8'rsp_text = response.text# 返回容器return [1, '000000', '获取网页的html信息成功', [rsp_text]]except Exception as e:print("获取网页的html信息异常," + str(e))return [0, '999999', "获取网页的html信息异常," + str(e), [None]]def spider_weather(region_code, tqyb_type):'''@方法名称: 爬取天气预报信息@中文注释: 根据地区代码,天气预报类型,爬取天气预报信息@入参:@param region_code str 地区代码@param tqyb_type str 类型(1-今天,2-近7天)@出参:@返回状态:@return 0 失败或异常@return 1 成功@返回错误码@返回错误信息@param rsp_dict dict 响应容器@作 者: PandaCode辉@创建时间: 2023-09-05@使用范例: spider_weather('101010100','1')天气预报网址http://www.weather.com.cn/weather/101010100.shtml --北京市,近7日天气http://www.weather.com.cn/weather1d/101010100.shtml --北京市,今天天气'''try:if (not type(region_code) is str):return [0, "111111", "地区代码参数类型错误,不为字符串", [None]]if (not type(tqyb_type) is str):return [0, "111112", "类型参数类型错误,不为字符串", [None]]url = ""# 类型(1-今天,2-近7天)if tqyb_type == '1':url = 'http://www.weather.com.cn/weather1d/' + region_code + '.shtml'elif tqyb_type == '2':url = 'http://www.weather.com.cn/weather/' + region_code + '.shtml'# UTC格式当前时区时间t = time.localtime()work_time = time.strftime("%Y-%m-%d %H:%M:%S", t)print('当前日期时间:' + str(work_time))now_day = str(work_time)[:7]# 根据url地址获取网页信息rst = get_html_text(url)if rst[0] != 1:return rsthtml_str = rst[3][0]# 使用BeautifulSoup解析网页数据soup = BeautifulSoup(html_str, "html.parser")# 返回容器初始化rsp_dict = {}# 类型(1-今天,2-近7天)if tqyb_type == '1':# 获取今天天气信息# 白天,天气情况tq_day_info = soup.select("div.t >ul.clearfix > li > p.wea")[0].textrsp_dict["tq_day_info"] = '白天,天气情况:' + tq_day_infoprint(rsp_dict["tq_day_info"])# 最高温度temperatrue_high = soup.select("div.t >ul.clearfix > li > p.tem")[0].text# 去除换行符temperatrue_high = ''.join(re.findall(r'\S', temperatrue_high))rsp_dict["temperatrue_high"] = '白天,最高温度:' + temperatrue_highprint(rsp_dict["temperatrue_high"])# 夜间,天气情况tq_night_info = soup.select("div.t >ul.clearfix > li > p.wea")[1].textrsp_dict["tq_night_info"] = '夜间,天气情况:' + tq_night_infoprint(rsp_dict["tq_night_info"])# 夜间,最低温度temperatrue_low = soup.select("div.t >ul.clearfix > li > p.tem")[1].text# 去除换行符temperatrue_low = ''.join(re.findall(r'\S', temperatrue_low))rsp_dict["temperatrue_low"] = '夜间,最低温度:' + temperatrue_lowprint(rsp_dict["temperatrue_low"])print('===============================')elif tqyb_type == '2':# 获取近7日天气rsp_dict["c7day_list"] = []# 日期day_info = soup.select("div.c7d > input > input > input > ul.t.clearfix > li > h1")# print('日期:' + str(day_info))# 天气tq_info = soup.select("div.c7d > input > input > input > ul.t.clearfix > li > p.wea")# print('天气:' + str(tq_info))# 温度tem_info = soup.select("div.c7d > input > input > input > ul.t.clearfix > li > p.tem")# print('温度:' + str(tem_info))# 风力win_info = soup.select("div.c7d > input > input > input > ul.t.clearfix > li > p.win > i")# print('风力:' + str(win_info))# 列表存储for i in range(7):temp_dict = {}# 日期temp_dict["day_info"] = '日期:' + now_day + '-' + str(day_info[i].text)print(temp_dict["day_info"])# 天气temp_dict["tq_info"] = '天气:' + str(tq_info[i].text)print(temp_dict["tq_info"])# 温度# 去除换行符temperatrue = ''.join(re.findall(r'\S', str(tem_info[i].text)))temp_dict["tem_info"] = '温度:' + temperatrueprint(temp_dict["tem_info"])# 风力temp_dict["win_info"] = '风力:' + str(win_info[i].text)print(temp_dict["win_info"])# 添加到列表rsp_dict["c7day_list"].append(temp_dict)print('===============================')# 返回容器return [1, '000000', '爬取天气预报信息成功', [rsp_dict]]except Exception as e:print("爬取天气预报信息异常," + str(e))return [0, '999999', "爬取天气预报信息异常," + str(e), [None]]# 主方法
if __name__ == '__main__':# 101010100 - 北京市# 爬取天气预报-今天rst1 = spider_weather('101010100', '1')rsp_dict1 = rst1[3][0]print(rsp_dict1)# 爬取天气预报-近7天rst2 = spider_weather('101010100', '2')rsp_dict2 = rst2[3][0]print(rsp_dict2)
相关文章:
bs4库爬取天气预报
Python不仅用于网站开发,数据分析,图像处理,也常用于爬虫技术方向,最近学习了解下,爬虫技术入门一般先使用bs4库,爬取天气预报简单尝试下。 第一步:首先选定目标网站地址 网上查询,…...
l8-d8 TCP并发实现
一、TCP多进程并发 1.地址快速重用 先退出服务端,后退出客户端,则服务端会出现以下错误: 地址仍在使用中 解决方法: /*地址快速重用*/ int flag1,len sizeof (int); if ( setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &a…...
编写中间件以用于 Express 应用程序
概述 中间件函数能够访问请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。 中间件函数可以执行以下任务: 执行任何代码。对请求和响应对象进行更改。结束请求/响应循环。调用堆…...
【2023年数学建模国赛】D题解题思路
2023年数学建模国赛D题解题思路 为了解决问题1、问题2和问题3,我们可以采用动态规划方法来制定生产计划,考虑了不确定性因素和多种可能情况的预案集。首先,我们需要定义一些变量和符号: T T T:总的养殖周期࿰…...
python爬虫之正则表达式学习
网络安全离不开脚本和工具的开发,python很多又需要正则表达式。 这是一个很好的学习正则表达式的项目 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md 基本匹配 正则表达式其实就是在执行搜索时的格式,它由一些字…...
智慧能源方案:TSINGSEE青犀AI算法中台在能源行业的应用
一、方案背景 互联网、物联网、人工智能等新一代信息技术引领新一轮产业革命,加快能源革命步伐。尤其是随着人工智能技术的不断发展,AI智能检测与识别技术在能源行业的应用也越来越广泛。与此同时,国家出台多项政策,将智慧能源纳…...
达梦数据库awr报告收集
1、找出快照点snap_id与时间的对应关系 SYS.WRM$_SNAPSHOT表中记录了快照点snap_id与时间的对应关系 例如如下语句可以得出2023-09-04这一天各个时间点对应的快照点snap_id select snap_id,end_interval_time from SYS.WRM$_SNAPSHOT where end_interval_time between to…...
c语言练习43:深入理解strcmp
深入理解strcmp strcmp的主要功能是用来比较两个字符串 模拟实现strcmp 比较两个字符串对应位置上的大小 按字典序进行比较 例如: 输入:abc abc 输出:0 输入:abc ab 输出:>0的数 输入:ab abc …...
NUC980webServer开发
目录 1.RTL8189FTV驱动移植 2.wifi配置工具hostapd移植 1.openssl-1.0.2r交叉编译 2.libnl-3.2.25.tar.gz交叉编译 3.hostapd-2.9.tar.gz交叉编译 4.移植相关工具到开发板 1.RTL8189FTV驱动移植 1. 把驱动文件源码放在linux源码的drivers/net/wireless/realtek/rtlwifi/目录…...
驱动开发--day2
实现三盏灯的控制,编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…...
用户促活留存新方式——在APP中嵌入小游戏
随着APP同类产品的不断出现,APP开发者们面临着激烈的竞争,很多APP下载后被新的APP取代,获客成本越来越高。同时开发者还会面临用户粘性差、忠诚度低、用完即走、留存困难,商业化价值被大大缩减。 在APP中植入小游戏来提高用户活跃…...
MySQL 8.0.34(x64)安装笔记
一、背景 从MySQL 5.6到5.7,再到8.0,版本的跳跃不可谓不大。安装、配置的差别也不可谓不大,特此备忘。 二、过程 (1)获取MySQL 8.0社区版(MySQL Community Server) 从 官网 字样 “MySQL …...
物流供应商实现供应链自动化的3种方法
当前影响供应链的全球性问题(如新冠肺炎疫情)正在推动许多物流供应商重新评估和简化其流程。运输协调中的摩擦只会加剧供应商无法控制的现有延误和风险。值得庆幸的是,供应链专业人员可以通过端到端的供应链自动化消除延迟,简化与合作伙伴的沟通…...
Mysql更新时间列只改日期为指定日期不更改时间
场景 Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间: Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间_霸道流氓气质的博客-CSDN博客 上面通过如下方式实现日期列增加指定天数。 UPDATE bus…...
实时测试工具 Visual Studio 扩展 NCrunch 4.18 Crack
NCrunch Visual Studio 扩展 .NET 的终极实时测试工具 在编码时查看实时测试结果和内联指标。 下载v4.18 发布于 2023 年 7 月 17 日 跳过视频至: 代码覆盖率 指标 分布式处理 配置 发动机模式 Visual Studio 自动并发测试 NCrunch 是一个完全自动化的测试扩展&a…...
Neo4j 基本语法
一、基本语法 1、新建节点 (1)基本语法: () 代表节点 示例: CREATE (u:User {uid:970939424 }) // 节点类型为User,属性值为uid970939424CREATE (u:Round {rid:7194842697444819113 }) // 节点类型为Rou…...
docker常见面试题
1.什么是docker docker是一个容器化平台,类似于一个集装箱,集装箱与集装箱之间互不影响,docker平台就是一个软件集装箱平台,我们可以构建应用程序,将其所有的依赖打包到一个容器中,然后就很方便的可以在其…...
静态路由:配置和使用详解
文章目录 一、静态路由的配置和使用详解1. 配置要点1.1 点到点接口配置1.2 以太网接口配置 2. 默认路由3. 静态路由的配置命令4. 静态路由实现路由备份和负载分担 二、静态路由的优先级和比较1. 静态路由的优先级设置2. 静态路由与动态路由的比较2.1 静态路由优缺点2.2 动态路由…...
玩转Mysql系列 - 第15篇:详解视图
这是Mysql系列第15篇。 环境:mysql5.7.25,cmd命令中进行演示。 需求背景 电商公司领导说:给我统计一下:当月订单总金额、订单量、男女订单占比等信息,我们啪啦啪啦写了一堆很复杂的sql,然后发给领导。 …...
0065__git fetch, git pull, git merge, git rebase
git fetch, git pull, git merge, git rebase_git pull和merge_送你一朵小莲花的博客-CSDN博客...
AJAX学习笔记4解决乱码问题
AJAX学习笔记3练习_biubiubiu0706的博客-CSDN博客 在Tomcat10来说,AJAX GET或者POST接收响应都不存在乱码问题 对于Tomcat9来说 前端测试代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试A…...
【23种设计模式】享元模式【⭐】
个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…...
语音信号的仿真原理
利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件 平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频 谱分析,设计合适的滤波器滤除噪声,恢复原信号。语音信…...
VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型
背景 随着业务爆炸式增长与云原生技术的日渐成熟,大量云原生分布式数据库产品如雨后春笋般涌现,其中一部分主打 OLTP 场景的分布式数据库强调的是从计算-存储分离架构获得弹性收益;对于业界各种计算-存储分离架构的数据库而言,怎么…...
crontab的配置参数和基础使用教程
crontab基本格式 crontab文件的基本格式如下: * * * * * command 这5个*代表: 第一个* :分钟(0-59)第二个* :小时(0-23)第三个* :一个月中的第几天(1-31)第四个* :月份(1-12)第五个* :一周中的第几天(0-6,其中0代表星期天) command代表要执行的命令。 crontab常用时间设置…...
基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
一、项目简介 本项目是一套基于Python开发的玛丽冒险小游戏程序,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试…...
K8S之使用yaml格式定义pod
mysql-pod.yaml # overView: # 1. web服务与db打包放在同一个pod中,本地通过localhost来访问,并附带存活性/可用性检测 # 2. 补充重启策略/镜像拉去策略 # 3. 对容器资源进行限制apiVersion: apps/v1 kind: Pod metadata:name: pub-oanamespace: hunte…...
SSH命令详解
本文转载于:https://blog.csdn.net/m0_60873746/article/details/130843325 SSH命令详解 SSH(Secure Shell)是一种用于安全登录远程计算机的网络协议。通过 SSH,可以在不受干扰的情况下,传输服务器操作系统和网络管理…...
Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法
Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法 解决方法: 1、先检查以下mysql的端口状态 netstat -anp|grep mysql如果显示127.0.0.1:3306 则说明需要修改,若为: : :3306,则不用。 在**/etc/mysql/mysql.conf.d/mysqld.cnf**&am…...
Python中的日期和时间(一)datetime模块
Python处理时间的对象很多,常用的有time、datetime和calendar等。本文对常用的时间对象的使用进行学习。在开始学习具体的对象前,先学习几个计算机的时间概念。 UTC(全球标准时间):是全球范围内计时的科学标准,它基于…...
织梦做的网站很老/百度助手下载安装
怎么查看服务器操作系统日志 内容精选换一换在待分析的服务器上安装节点。Web服务器(即安装鲲鹏性能分析工具的服务器)默认安装了节点,如果待分析的服务器与安装工具的服务器是同一个,请跳过该章节。已成功登录系统性能分析。待添加节点的服务器已配置操…...
龙岩长汀最新疫情/神马seo教程
怎么把本地项目推送到GitHub或者码云线上呢?来来回回错了很多次,终于总结了正确的步骤。首先注册好github账号,或者码云账号。1.然后建一个自己的本地仓,你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通…...
响应式布局网站开发/湖南百度推广公司
24.计划报表进入报表区,定位到“Microsoft Generic Report Library”,选中“可用性”,点击右侧窗口的“计划”填写描述,传递方法、计划报告名称和存放计划报告的路径、呈现格式、写入模式,订阅报表的用户名和密码&…...
广州安全教育平台入口登录处/aso优化榜单
阅读目录:1.背景2.项目管理,质量、度量、进度3.软件开发是一种设计活动而不是建筑活动4.快速开发(简单的系统结构与复杂的业务模型)5.技术人员的业务理解与产品经理的业务理解的最终业务模型5.1.产品的业务理解(业务流…...
做网站开发多少钱/湖南网站建设推荐
阿里 阿里的开源项目很多,这也跟淘宝正明的开源态度密不可分。有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,例如 MetaQ(分布式消息系统)、dubbo(RPC框架)、cobar(数据库中间件),或者是Java世界的工…...
wordpress激活码充值/枫树seo
多态 1、多态的体现: 父类的引用或者接口的引用指向了自己的子类对象。 Dog d new Dog();//Dog对象的类型是Dog类型。 Animal a new Dog();//Dog对象的类型右边是Dog类型,左边Animal类型。多态的利弊: 好处:提高了代码的扩展…...