Python编程技术

news2025/1/3 17:38:07

设计目的

该项目框架Scrapy可以让我们平时所学的技术整合旨在帮助学习者提高Python编程技能并熟悉基本概念:

1. 学习基本概念:介绍Python的基本概念,如变量、数据类型、条件语句、循环等。

2. 掌握基本编程技巧:教授学生如何使用Python编写简单的程序,如计算器、字符串处理等。

3. 熟悉Python样式指南:学习Python的官方样式指南(PEP 8),如编码风格、行长限制等,以确保代码的可读性和可维护性。

4. 掌握常见数据结构和算法:介绍列表、元组、字典、栈、队列等常见数据结构,以及相关的算法,如排序、搜索等。

5. 学习基于对象的编程:教授学生如何使用Python的面向对象编程(OOP)概念,如类、对象、继承、多态等。

6. 掌握网络编程:介绍Python网络编程中的基本概念和技术,如网络请求、网络服务器、套接字等。

7. 学习多线程和多进程编程:教授学生如何使用Python的多线程和多进程编程技术,以提高程序性能和可扩展性。

8. 熟悉Python库和模块:介绍Python的常用库和模块,如from os import remove from time import sleep等,以便学生在实际项目中应用Python编程技能。

9. 实践项目:通过完成实践项目,帮助学生将所学知识应用到实际编程场景,提高实际编程能力。

代码审查和优化:教授学生如何对自己和他人的Python代码进行审查,以提高代码质量和可读性。

10.通过这个课程,学生将掌握Python编程的基本技能,了解Python的编程风格和最佳实践,并学会应用Python编程技能来解决实际问题

11. Scrapy框架介绍:介绍Scrapy的主要功能和使用场景,以便学习者了解如何使用Scrapy进行爬取。Scrapy的使用步骤:详细介绍如何使用Scrapy编写爬虫脚本,包括定义爬虫项目、设置爬虫设置、编写爬虫规则和处理爬取结果等。实际爬取案例:通过实际爬取案例,如爬取广东各城市天气预报,帮助学习者了解如何使用Scrapy爬取实际世界中的天气预报数据。处理HTML标签和网页源代码:教授学习者如何识别和处理常见HTML标签,以及如何理解网页源代码结构。使用Beautiful Soup库:介绍Beautiful Soup库的功能,并通过实际例子教授学习者如何使用Beautiful Soup从网页中提取数据。

设计内容与要求

1、熟练安装 Python 扩展库 scrapy。

2、熟悉常见 HTML 标签的用法。

3、理解网页源代码结构。

4、理解 scrapy 框架工作原理。实验内容:

5.安 装 Python 扩 展 库 scrapy , 然 后 编 写 爬 虫 项 目 , 从 网 站 http://www.weather.com.cn/guangdong/index.shtml 爬取广东各城市的天气预报数据,并把爬取到的天气数据写入本地文本 weather.txt。

设计思路

学习使用Scrapy框架爬取天气预报,提高Python爬虫技能

在这次课程考核实验中,我们将使用Python和Scrapy框架编写一个爬取天气预报的项目。具体实验步骤如下:

1. 安装Scrapy:首先,确保已安装Python扩展库Scrapy。可以通过`pip install scrapy`命令安装。

2. 创建爬虫项目:创建一个新的Python文件,例如`weather_spider.py`,并在其中定义爬虫类。在爬虫类中,我们将编写代码来爬取天气预报信息。

3. 编写爬虫代码:在爬虫类的`parse`方法中,我们将使用Scrapy的API来提取网页中的天气信息。具体实现方法可能因网站的结构和布局而异,但通常可以使用XPath或CSS选择器来提取所需的元素。

4. 运行爬虫:在命令行中运行爬虫项目,并指定爬取的城市和天气预报的时间范围。例如:`scrapy crawl weather_spider -a start_dates=2023-12-15,end_dates=2023-12-24 -s OUTPUT=file:///path/to/output.txt`.

5. 保存爬取结果:爬虫运行完成后,将爬取到的天气信息保存到指定的文件中,例如`output.txt`。

通过这个实验,您将学习如何使用Python和Scrapy框架爬取天气预报信息。在实际应用中,您可以根据需要调整爬虫代码以适应不同的网站结构和布局。同时,您还可以尝试使用其他爬虫技术,如 Beautiful Soup 和 Selenium,以进一步提高爬取效率和灵活性。以下是设计的流程图

实现过程

实验过程和实验步骤如下以及详细的核心代码解释

1.在命令提示符环境使用 pip install scrapy 命令安装 Python 扩展库 scrapy

2.在vscode的终端中使用命令提示符 scrapy startproject GuangDongWeather创建爬虫项目文件

3.进入爬虫项目文件夹,然后执行命令 scrapy genspider GuangDongWeatherSpider www.weather.com.cn 创建爬虫程序。

4.使用浏览器打开网址http://www.weather.com.cn/guangdong/index.shtml,

5.找到下面位置   广东天气预报 - 广东

6.在页面上单击鼠标右键,选择“查看网页源代码”,然后找到与“城市预报列表”  对应的位置。

7.选择并打开广东省内任意城市的天气预报页面,此处以深圳为例

8.在页面上单击鼠标右键,选择“查看网页源代码”,找到与上图中天气预报相对应  的位置。

9.修改items.py文件,定义要爬取的内容如下

import scrapy

class GuangDongWeatherSpiderItem(scrapy.Item):
    city = scrapy.Field()
    weather = scrapy.Field()
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass

10.修改爬虫文件 GuangDongWeatherSpider.py,定义如何爬取内容,其中用到的规则参考前面对页面的分析,如果无法正常运行,有可能是网页结构有变化,可以回到前面的步骤重新分析网页源代码,代码如下

import scrapy
from os import remove
from time import sleep
from GuangDongWeather.items import GuangDongWeatherSpiderItem

class EveryCitySpider(scrapy.Spider):
    name = 'GuangDongWeatherSpider'
    allowed_domains = ['www.weather.com.cn']
    # 首页,爬虫开始工作的页面
    start_urls = ['http://www.weather.com.cn/shengzhen/index.shtml']

    try:
        remove('lqf.txt')
    except:
        pass

    def parse(self, response):
        # 获取每个地市的链接地址,针对每个链接地址发起请求
        urls = response.css('dt>a[title]::attr(href)').getall()
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse_city)
            sleep(0.3)
    
    def parse_city(self, response):
        '''处理每个地市天气预报链接地址的实例方法'''
        # 用来存储采集到的信息的对象
        item = GuangDongWeatherSpiderItem()
        # 获取城市名称
        city = response.xpath('//div[@class="crumbs fl"]/a[3]/text()')
        item['city'] = city.get()

        # 定位包含天气预报信息的ul节点,其中每个li节点存放一天的天气
        selector = response.xpath('//ul[@class="t clearfix"]')[0]

        weather = []
        # 遍历当前ul节点中的所有li节点,提取每天的天气信息
        for li in selector.xpath('./li'):
            # 提取日期
            date = li.xpath('./h1/text()').get()
            # 云的情况
            cloud = li.xpath('./p[@title]/text()').get()
            # 晚上不显示高温
            high = li.xpath('./p[@class="tem"]/span/text()').get('none')
            low = li.xpath('./p[@class="tem"]/i/text()').get()
            wind = li.xpath('./p[@class="win"]/em/span[1]/@title').get()
            wind += ','+li.xpath('./p[@class="win"]/i/text()').get()
            weather.append(f'{date}:{cloud},{high}/{low},{wind}')
        item['weather'] = '\n'.join(weather)
        return [item]

11.修改 settings.py 文件,分派任务,指定处理数据的程序如下,这里划线的名称要对应你的文件名,相当于再找信道,在GuangDongWeather这个文件下找pipelines然后再找里面的GuangDongWeathersSpiderPipeline

BOT_NAME = "GuangDongWeather"

SPIDER_MODULES = ["GuangDongWeather.spiders"]
NEWSPIDER_MODULE = "GuangDongWeather.spiders"
ITEM_PIPELINES = {
'GuangDongWeather.pipelines.GuangDongWeatherSpiderPipeline':1,
}

12.修改 pipelines.py 文件,把爬取到的数据写入文件 lqf.txt代码如下

from itemadapter import ItemAdapter

class GuangDongWeatherSpiderPipeline(object):
    def process_item(self, item, spider):
        with open('lqf.txt', 'a', encoding='utf8') as fp: 
          fp.write(item['city']+'\n') 
          fp.write(item['weather']+'\n\n')
        return item

13.最后就可以通过命令去运行框架如下,你需要去到对应的目录下运行,不然会报错

scrapy crawl GuangDongWeatherSpider

       最后需要注意以下几点,第一需要注意的就是版本的问题,第二框架问题,第三电脑问题,这个时候你就要多留意一下报错的原因,然后代码都要进行分析看看它再说的什么,这样子就可以解决大部分问题​​​​​​​

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

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

相关文章

《Java核心技术 卷II》流的创建

流的创建 Collection接口中stream方法可以将任何集合转换为一个流。 用静态Stream.of转化成数组。 Stream words Stream.of(contents.split("\\PL")); of方法具有可变长参数,可以构建具有任意数量的流。 使用Array.stream(array,from,to)可以用数组…

ESP32-CAM开发板入门 (下载示例程序)

ESP32-CAM开发板例程使用 1、准备工作1.1、硬件准备1.2、软件准备 2、选择示例程序并录入第一步 1、准备工作 1.1、硬件准备 1.2、软件准备 Arduino IDE : 编程与写入(下载地址 https://www.arduino.cc/en/software) 安装好后将软件设置到…

Cocos Creator 3.8.5 正式发布,更小更快更多平台!

在 Cocos Creator 3.8.5 版本中,我们做了新一轮的优化。 在加载速度、代码裁剪、平台增强等多方面做了优化,提升了开发者体验和游戏性能。 希望能够助 Cocos 开发者们的产品更上一层楼。 一、加载速度优化 1、WASM 模块延迟加载 在早期版本中&#xff0c…

HTML——30.视频引入

<head><meta charset"UTF-8"><title>视频引入</title></head><body><!--video:在网页中引入音频IE8以及之前版本不支持属性名和属性值一样&#xff0c;可以只写属性名src属性:指定视频文件路径&#xff0c;必须要有controls属…

T7 TensorFlow入门实战——咖啡豆识别

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習紀錄博客&#x1f356; 原作者&#xff1a;K同学啊 | 接輔導、項目定制 一、前期准备 1. 导入数据 # Import the required libraries import numpy as np import PIL,pathlib from PIL import Image import ma…

OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程&#xff0c;触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器&#xff0c;树莓派卡片电脑设计&#xff0c;支持开源鸿蒙OpenHarmony3.2-5.0系统&#xff0c;适合鸿蒙开发入门学习。 编译源码…

flask后端开发(3):html模板渲染

目录 渲染模板html模板获取路由参数 gitcode地址&#xff1a; https://gitcode.com/qq_43920838/flask_project.git 渲染模板 这样就能够通过html文件来渲染前端&#xff0c;而不是通过return了 html模板获取路由参数

SOME/IP 协议详解——序列化

文章目录 0. 概述1.基本数据序列化2.字符串序列化2.1 字符串通用规则2.2 固定长度字符串规则2.3 动态长度字符串规则 3.结构体序列化4. 带有标识符和可选成员的结构化数据类型5. 数组5.1 固定长度数组5.2 动态长度数组5.3 Enumeration&#xff08;枚举&#xff09;5.4 Bitfield…

HTML5实现好看的喜庆圣诞节网站源码

HTML5实现好看的喜庆圣诞节网站源码 前言一、设计来源1.1 主界面1.2 圣诞介绍界面1.3 圣诞象征界面1.4 圣诞活动界面1.5 圣诞热度界面1.6 圣诞纪念界面1.7 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的喜庆圣诞节网站源码&#xff0c;圣…

嵌入式开发中的机器人表情绘制

机器人的表情有两种&#xff0c;一种是贴图&#xff0c;一钟是调用图形API自绘。 贴图效果相对比较好&#xff0c;在存储空间大的情况下是可以采用的。 自绘比较麻烦&#xff0c;但在资源和空缺少的情况下&#xff0c;也是很有用的。而且自绘很容易通过调整参数加入随机效果&…

opencv实现KNN算法识别图片数字

KNN算法实现识别图片数字 目录 KNN算法实现识别图片数字图片基本情况图片数据 图片数字识别图片数据处理及预测其它数字图片正确率预测 图片基本情况 图片 数据 图片像素是2000x1000,即高&#xff08;行&#xff09;1000&#xff0c;宽&#xff08;列&#xff09;2000&#xf…

美畅物联丨视频上云网关获取视频流地址供第三方调用的方法

在视频监控与流媒体传输领域&#xff0c;视频流地址的获取与调用是极为关键的环节。视频上云网关作为一款高效且稳定的视频传输设备&#xff0c;为获取视频流地址提供了便捷途径&#xff0c;从而使外部系统或平台能够方便地进行调用。今天我们就来讨论一下如何在视频上云网关上…

MySQL数据库——索引结构之B+树

本文先介绍数据结构中树的演化过程&#xff0c;之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行&#xff1f;为什么不使用二叉查找树&#xff08;BST&#xff09;&#xff1f;为什么不使用平衡二叉树&#xff08;AVL树&#xff09;&a…

一起学Git【第六节:查看版本差异】

git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…

Fetch处理大模型流式数据请求与解析

为什么有的大模型可以一次返回多个 data&#xff1f; Server-Sent Events (SSE)&#xff1a;允许服务器连续发送多个 data: 行&#xff0c;每个代表一个独立的数据块。 流式响应&#xff1a;大模型服务通常以流式响应方式返回数据&#xff0c;提高响应速度。 批量处理&#x…

期权懂|个股期权的流动性如何?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 个股期权的流动性如何&#xff1f; 个股期权作为场外交易工具&#xff0c;具有较高的灵活性。场外交易意味着交易双方可以直接协商交易条款&#xff0c;这有助于满足不同投资者的…

国产低代码框架zdppy开发笔记002 标准的接口响应

前言 通过前面的学习, 我们已经知道了zdppy_api和zdppy_req的基本用法, 接下来我们会在学习中多次用到这两个框架. 我们已经知道了该如何响应一个字符串,但是我们该如何响应json数据呢? 在zdppy_api中,我们定义了一组规范的API响应, 我们慢慢来看看. 规范的响应 首先来看…

Linux | 零基础Ubuntu解压RaR等压缩包文件

目录 介绍 案例分析 安装工具 解压实践 介绍 RAR是一种专利文件格式&#xff0c;用于数据压缩与归档打包&#xff0c;开发者为尤金罗谢尔&#xff08;俄语&#xff1a;Евгений Лазаревич Рошал&#xff0c;拉丁转写&#xff1a;Yevgeny Lazarevich R…

Python基于卷积神经网络的车牌识别系统开发与实现

1. 简介 车牌识别是人工智能在交通领域的重要应用&#xff0c;广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络&#xff08;CNN&#xff09;的深度学习算法&#xff0c;结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…

stm32内部flash在线读写操作

stm32内部flash在线读写操作 &#x1f4cd;相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》 ✨不同系列&#xff0c;内部flash编程有所区别。例如stm32f1是按照页擦除&#xff0c;半字&#xff08;16bit&#xff09;或全字(32bit)数据写入&#xff1b;st…