当前位置: 首页 > article >正文

Python爬虫案例六:抓取某个地区某月份天气数据并保存到mysql数据库中

测试链接:https://lishi.tianqi.com/guangzhou/202003.html

源码:

import requests, pymysql
from lxml import etree
class ThSpider(object):
    def __init__(self):
        # 初始化
        self.month_list = ['202101', '202102', '202103', '202104', '202105', '202106', '202107', '202108', '202109', '202110', '202111', '202112', '202201', '202202']
        # 链接数据库
        self.cz = pymysql.connect(
            host='127.0.0.1',
            port=3306,
            user='root',
            password='root',
            db='基本操作',
            charset='utf8'
        )
        # 创建游标
        self.kit = self.cz.cursor()
        # 创建数据库
        table_sql = \
            '''
                create table if not exists 天气数据 (
                    日期 varchar (50),
                    最高气温 varchar (50),
                    最低气温 varchar (50),
                    天气 varchar (50),
                    风向 varchar (50)
                );
            '''
        self.kit.execute(table_sql)

    def request_start_url(self):
        # 发送请求 + 得到响应
        for month in self.month_list:
            start_url = 'https://lishi.tianqi.com/shanghai/{}.html'.format(month)
            self.headers = {
                'Cookie': 'UserId=17209281674394559; Hm_lvt_7c50c7060f1f743bccf8c150a646e90a=1720928176; HMACCOUNT=66A8254591DC78E3; Hm_lpvt_7c50c7060f1f743bccf8c150a646e90a=1720941400',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
            }
            response = requests.get(start_url, headers=self.headers).text
            self.parse_response(response)
        self.commit_close()  # 也可在此处调用提交函数  请求一个月份,解析一个月份,然后提交数据库

    def parse_response(self, response):
        # 解析响应 + 得到字段
        A = etree.HTML(response)
        li_list = A.xpath('//ul[@class="thrui"]/li')
        for li in li_list:
            # 日期
            rq = li.xpath('./div[1]/text()')[0]
            # 最高气温
            gw = li.xpath('./div[2]/text()')[0]
            # 最低气温
            dw = li.xpath('./div[3]/text()')[0]
            # 天气
            tq = li.xpath('./div[4]/text()')[0]
            # 风向
            fx = li.xpath('./div[5]/text()')[0]
            # print(rq, gw, dw, tq, fx)
            insert_sql = \
                '''
                    insert into 天气数据 values ("{}", "{}", "{}", "{}", "{}")
                '''.format(rq, gw, dw, tq, fx)
            self.kit.execute(insert_sql)
            print('ok --{}'.format(rq))

    def commit_close(self):
        # 数据库的提交和关闭
        self.kit.close()
        self.cz.commit()
        self.cz.close()

    def main(self):
        self.request_start_url()
        # self.commit_close()

if __name__ == '__main__':
    th = ThSpider()
    th.main()

运行效果:

 


http://www.kler.cn/a/303289.html

相关文章:

  • 轮转数组
  • Kettle配置数据源错误“Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found”解决记录
  • Sql server查询数据库表的数量
  • python怎么设置环境变量
  • ssm100医学生在线学习交流平台+vue(论文+源码)_kaic
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • 单页面应用和vite的基本使用(props,class,style)
  • 基于YOLO深度学习和百度AI接口的手势识别与控制项目
  • Claude Prompt 汉语新解
  • 与 D3.js 的对比:ECharts 在前端可视化中的优势与劣势
  • Xcode 16 RC (16A242) 发布下载,正式版下周公布
  • 【网易低代码】第3课,页面表格删除功能
  • 828华为云征文|部署多媒体流媒体平台 Plex
  • 如何选择合适的数据报表工具?
  • JS面试真题 part5
  • 【HTML】元素的分类(块元素、行内元素、行内块元素)
  • 探索数据可视化的奥秘:Seaborn库的魔力
  • appium server gui详细按照步骤
  • 【加密社】深入理解TON智能合约 (FunC语法)
  • 跨服务器执行PowerShell脚本
  • MySQL 创建数据库和表全攻略
  • HarmonyOS -服务卡片
  • CustomerbasicController
  • Android 提高第一次开机速度(取消系统默认手机加密)
  • C++ Primer Plus(速记版)-容器和算法
  • linux常用环境配置