Python编程技术

设计目的

该项目框架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 scrapyclass 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 GuangDongWeatherSpiderItemclass 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:passdef 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 ItemAdapterclass 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.rhkb.cn/news/498385.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读《Cross-scale multi-instance learning for pathological image diagnosis》

From:2024 MIA CS-MIL GitHub:https://github.com/hrlblab/CS-MIL 一、Abstract: 在数字病理学中,分析高分辨率全幻灯片图像(WSIs)时涉及多个尺度的信息是一个重大挑战。多实例学习(MIL&#x…

短视频平台的视频水印怎么去除?

当你看到某个短视频,觉得内容非常有价值,想要个人收藏以便日后学习或回顾,但发现短视频平台无法直接下载且带有水印时,以下提供的几种方法将帮助你轻松去除水印,获取高清无水印的视频内容。 方法一:使用第…

【Redis】Redis 典型应用 - 缓存 (cache)

目录 1. 什么是缓存 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 4. 缓存的淘汰策略 5. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 关于缓存预热 (Cache preheating) 关于缓存穿透 (Cache penetration) 关于缓存雪崩 (Cache avalanche) 关…

解决springdoc-openapi-ui(Swagger3)跳转默认界面问题

文章目录 问题现象解决方法 问题现象 项目正确引入springdoc-openapi-ui依赖&#xff0c;但是访问/swagger-ui/index.html界面时&#xff0c;跳转到了默认的界面&#xff0c;如下图所示&#xff1a; 解决方法 1、升级maven依赖为1.8.0以上&#xff1a; <dependency>…

绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图

clc clear close all %% 读取数据 load(MyColor.mat) %读取颜色包for iloop 1:25 %提取工作表数据data0(iloop) {readtable(data.xlsx,sheet,iloop)}; end%% 解析数据 countzeros(23,14); for iloop 1:25index(iloop) { cell2mat(table2array(data0{1,iloop}(1,1)))};data(i…

HALCON中用于分类的高斯混合模型create_class_gmm

目录 一、创建用于分类的高斯混合模型函数二、代码和效果展示三、相关函数 一、创建用于分类的高斯混合模型函数 create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)create_class_gmm创建用于分类的高斯…

lua-debug for Sublime

目标 Sublime 也支持 lua-debug&#xff0c;操作体验与 VSCode 一致。 优势 执行效率高&#xff0c;不掉帧 可随时开启 配置简单&#xff0c;一份配置兼容 VSCode 和 Sublime 安装 要求 Sublime 4 的版本&#xff08;注&#xff1a;从 Sublime 3 升到 4 的不算&#xff0c;…

Kafka消息不丢失与重复消费问题解决方案总结

1. 生产者层面 异步发送与回调处理 异步发送方式&#xff1a;生产者一般使用异步方式发送消息&#xff0c;异步发送有消息和回调接口两个参数。在回调接口的重写方法中&#xff0c;可通过异常参数判断消息发送状态。若消息发送成功&#xff0c;异常参数为null&#xff1b;若发…

leetcode 3312. 查询排序后的最大公约数

题目如下 错误示范: 暴力做法遍历nums数组分别求公约数 using namespace std; int gcd(int a,int b) {int a1 a , b1 b;if(a < b) {a1 b;b1 a;}if(a1 % b1 0) return b1;return gcd(a1 % b1,b1);}//logn vector<int> gcdValues(vector<int>& nums, …

VuePress搭建个人博客

VuePress搭建个人博客 官网地址: https://v2.vuepress.vuejs.org/zh/ 相关链接: https://theme-hope.vuejs.press/zh/get-started/ 快速上手 pnpm create vuepress vuepress-starter# 选择简体中文、pnpm等, 具体如下 .../19347d7670a-1fd8 | 69 .../19…

Junit4单元测试快速上手

文章目录 POM依赖引入业务层测试代码Web层测试代码生成测试类文件 在工作中我用的最多的单元测试框架是Junit4。通常在写DAO、Service、Web层代码的时候都会进行单元测试&#xff0c;方便后续编码&#xff0c;前端甩锅。 POM依赖引入 <dependency><groupId>org.spr…

ABB RobotStudio学习记录(二)SmartGripper模拟

SmartGripper模拟 准备具体操作 准备 名称版本Robot Studio6.08 为了简化开发&#xff0c;我研究了 ABB 机械臂 SmartGripper 在 ABB RobotStudio 中的模拟操作。 具体操作 主要分3个步骤&#xff1a; 修改机械装置&#xff0c;设置Pose; 我这里使用的ABB YuMi&#xff0c…

terminal_学习

参考&#xff1a; 让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南 https://sspai.com/post/55176MAC 终端美化教程&#xff08;来个全套 &#xff09;https://blog.csdn.net/weixin_42326144/article/details/121957795 x.1 zsh做美化&#xff08;安装oh…

音视频入门知识(四):封装篇

⭐四、封装篇 H264封装成mp4、flv等格式&#xff0c;那为什么需要封装&#xff1f; ​ h264也能播放&#xff0c;但是按照帧率进行播放&#xff0c;可能不准 ★FLV **FLV&#xff08;Flash Video&#xff09;**是一种用于传输和播放视频的容器文件格式。FLV 格式广泛应用于流媒…

使用 ASP.NET Core wwwroot 上传和存储文件

在 ASP.NET Core 应用程序中上传和存储文件是用户个人资料、产品目录等功能的常见要求。本指南将解释使用wwwroot存储图像&#xff08;可用于文件&#xff09;的过程以及如何在应用程序中处理图像上传。 步骤 1&#xff1a;设置项目环境 确保您的 ASP.NET 项目中具有必要的依…

S2-007-RCE(CVE-2012-0838)--vulhub

S2-007-RCE(CVE-2012-0838) 攻击者可以利用不安全的输入数据&#xff0c;构造OGNL表达式&#xff0c;最终导致服务器执行恶意命令。特别是在没有适当的输入验证或配置的情况下&#xff0c;攻击者可以在 HTTP 请求中嵌入 OGNL 表达式&#xff0c;触发远程代码执行。 Affected …

tar.gz压缩文件在linux上解压异常问题:gzip:stdin:invalid compressed data

1. 异常描述 将一个tar.gz压缩文件从windows拷贝到linux上之后&#xff0c;使用命令&#xff1a;tar -zxvf xxx.tar.gz压缩包时出现如下提示信息&#xff1a; 2. 异常分析 压缩包在下载的时候没有下载完整&#xff0c;重新下载一个试试。

UE5材质节点CameraDepthFade

相机深度消失&#xff0c;Fade Length相机离物体位置&#xff0c;Fade Offset消失偏移 可以让物体随着相机距离消失 相机深度消失 边缘自发光

Python机器学习笔记(十五、聚类算法的对比和评估)

用真实世界的数据集对k均值、凝聚聚类和DBSCAN算法进行比较。 1. 用真实值评估聚类 评估聚类算法对真实世界数据集的聚类结果&#xff0c;可以用调整rand指数ARI和归一化互信息NMI。 调整rand指数 &#xff08;adjusted rand index&#xff0c;ARI&#xff09;和归一化互信息…

SAP PP bom历史导出 ALV 及XLSX 带ECN号

bom总数 104W PS超过XLSX上限 &#xff0c;那就分文件 *&---------------------------------------------------------------------* *& Report ZRPT_PP_BOM_HIS_ECN *&---------------------------------------------------------------------* *& tcode:zpp0…