python-scrapy框架示例

参考:https://blog.csdn.net/qq_44907926/article/details/119531324

创建项目步骤:
1.目标网站:www.itcast.cn
2.安装虚拟环境

pip install virtualenv

3.创建虚拟环境

virtualenv --always-copy --system-site-packages venv

4.激活虚拟环境

venv\scripts\activate

5.安装twisted(Twisted是基于事件驱动的网络引擎框架)

pip install twisted

6.安装scrapy 爬虫框架

pip install scrapy

7.创建项目

scrapy startproject itcastScrapy
cd itcastScrapy
#itcastSpider  爬虫名字 itcast.cn 爬虫网站
scrapy genspider itcastSpider itcast.cn

在这里插入图片描述
8.创建 main.py 执行scrapy

from scrapy import cmdline
cmdline.execute("scrapy crawl itcastSpider".split())

在这里插入图片描述
9.各文件代码
9.1 items.py 需要爬取的内容

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapy# 需要爬取的内容 建模
class ItcastscrapyItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()passclass ItcastItem(scrapy.Item):# 爬取老师信息name = scrapy.Field()# 爬取老师职位title = scrapy.Field()# 爬取 老师信息info = scrapy.Field()

9.2 pipelines.py 管道,保存数据

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import json# 管道,保存数据
class ItcastscrapyPipeline:def process_item(self, item, spider):return itemclass UbuntuPipeline(object):def __init__(self):self.file = open('itcast.json', 'w', encoding='utf-8')def process_item(self, item, spider):# 将item对象强制转为字典,该操作只能在scrapy中使用item = dict(item)# 爬虫文件中提取数据的方法每yield一次,就会运行一次# 该方法为固定名称函数# 默认使用完管道,需要将数据返回给引擎# 1.将字典数据序列化'''ensure_ascii=False 将unicode类型转化为str类型,默认为True'''json_data = json.dumps(item, ensure_ascii=False, indent=2) + ',\n'# 2.将数据写入文件self.file.write(json_data)return itemdef __del__(self):self.file.close()

9.3 middlewares.py 自定义中间件文件

9.4 settings.py 设置文件

# Obey robots.txt rules
ROBOTSTXT_OBEY = False# 设置浏览器UA
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36',}
# 300 优先级,越小执行越早
ITEM_PIPELINES = {# "itcastScrapy.pipelines.ItcastscrapyPipeline": 300,"itcastScrapy.pipelines.UbuntuPipeline": 300,
}

9.5 ItcastspiderSpider.py

import scrapy
from ..items import ItcastItem
from bs4 import BeautifulSoupclass ItcastspiderSpider(scrapy.Spider):name = "itcastSpider"allowed_domains = ["itcast.cn"]start_urls = ["https://itcast.cn"]def parse(self, response):# 获取网页源代码# print(response.body.decode())soup = BeautifulSoup(response.body.decode(), 'lxml')li_list = soup.select('div.head_nav>ul>li')for li in li_list:if li.text.strip() == '教研团队':for a in li.select('a'):href = a['href']yield scrapy.Request(url=href, callback=self.parse_teacher)breakdef parse_teacher(self, response):# 获取网页源代码# print(response.body.decode())items = []document = BeautifulSoup(response.body.decode(), 'lxml')li_list = document.select('div.tea_con div.tea_txt_cur ul li')# 遍历教师节点列表for li in li_list:item = ItcastItem()name = li.select(' div.li_txt h3')[0].texttitle = li.select(' div.li_txt h4')[0].textinfo = li.select(' div.li_txt p')[0].textitem['name'] = nameitem['title'] = titleitem['info'] = infoitems.append(item)# 提交所有收集的itemsfor item in items:yield item

执行结果
在这里插入图片描述

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

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

相关文章

便捷的驾驶证识别API,简化工作流程

随着社会的发展和人们生活水平的提高,机动车的数量也越来越多。为了确保交通安全和减少违法行为,每个驾驶机动车的人都需要携带驾驶证。然而,识别驾驶证上的信息却是一个繁琐的过程。为了简化这个工作流程,提高工作效率&#xff0…

信创基础软件之数据库

一、数据库概述 数据库是一种用于存储和管理拥有固定格式和结构数据的仓库型数据管理系统。其主要用于业务数据的存储和业务逻辑运算,具体负责保障数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的系统恢复。 二、数据库的体系架构 数据库内核:对数…

这份攻防图谱,哪个搞安全的见了会不想要?(附下载)

近年来,随着我国信息化建设不断推进,信息技术广泛应用,信息网络快速普及。信息网络在促进经济发展、社会进步、科技创新的同时,也带来十分突出的信息安全问题。 现今的网络攻击手段逐步多样化、攻击方式也更加隐蔽难以发现。对于…

信息安全-古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

WebSocket 全面解析+实战演练(Nodejs实现简易聊天室)

🔥 个人主页:空白诗 文章目录 🌟 引言📚 WebSocket基础概念📌 什么是WebSocket?📌 为什么需要WebSocket?📌 与HTTP的关系 💻 WebSocket API 使用指南&#x1…

《学周刊》杂志社学周刊杂志社学周刊编辑部2024年第15期目录

高等教育 人工智能时代的高校人才培养模式创新探讨 潘邦超; 1-3 高等院校视角下的“家校社”协同育人问题及对策研究——以驻盐高校为例 张雨清; 4-6 职业教育《学周刊》投稿:cn7kantougao163.com 基于EST理念的中职《成本会计》课程混合式教学策略研究…

JAVA中的线程、死锁、异常

线程 Thread 一、程序 1.一段静态代码(静态) 二、进程 1.动态的,有开始,有结束;2.程序的一次执行过程,3.操作系统调度分配资源的最小单位; 三、…

循环编码:时间序列中周期性特征的一种常用编码方式

在深度学习或神经网络中,“循环编码”(Cyclical Encoding)是一种编码技术,其特点是能够捕捉输入或特征中的周期性或循环模式。这种编码方法常用于处理具有周期性行为的任务,比如时间序列预测或理解展示周期性特征的序列…

函数编辑器调研及设计开发

前言:在产品研发中需要一款可嵌入web开发的代码及函数编辑器,本文从功能,扩展,外观/交互,维护/社区,兼容性,开源与否等方面考虑,进行对比筛选 1、编辑器统计数据 市面上编辑器有很…

软考是否存在包过班?

国家考试,虽然有人喊着包过,但你也别轻易相信啊,姐妹,要好好保护好你的钱包啊!这种考试是没有所谓的包过的。 给你一些学习软考需要注意的要点: 1、深入理解考试内容: 在准备软考之前&#xf…

【redis】redis持久化分析

目录 持久化Redis持久化redis持久化的方式持久化策略的设置1. RDB(快照)fork(多进程)RDB配置触发RDB备份自动备份手动执行命令备份(save | bgsave)flushall命令主从同步触发动态停止RDB RDB 文件恢复验证 RDB 文件是否被加载 RDB …

面试中算法(删去n个数字后的最小值)

有一个整数,从该整数中去掉n个数字,要求剩下的数字形成的新整数尽可能小。 分析:使用栈的特性,在遍历原整数的数字时,让所有数字一个一个入栈,当某个数字需要被删除时,(即栈顶数字&g…

期权扫盲贴:基础知识汇总,如何开通低佣期权账户(建议收藏)

一、什么是场内期权? 场内期权,也被称为交易所期权,是指在证券交易所内进行交易的标准化期权合约。 场内期权的交易是由证券交易所发布和监管的,具有统一的合约规格和交易规则,因此方便投资者进行交易。 以中国证券…

智慧公厕建设,打造智慧城市基础设施新亮点

公共厕所是城市基础设施的重要组成部分,而智慧公厕的建设则是现代城市管理的创新之举。为了实现公厕的精细化管理和提供更便捷的服务,推进智慧公厕建设必须要实现技术融合、业务融合、数据融合的目标,跨越层级、地域、系统、部门和业务的限制…

【C语言】——联合体与枚举

【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体   与…

每日OJ题_贪心算法三②_力扣553. 最优除法

目录 力扣553. 最优除法 解析代码 力扣553. 最优除法 553. 最优除法 难度 中等 给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如, [2,3,4] -> 2 / 3 / 4 。 例如,nums [2,3,4],我们将求表达式的值 "…

冲突:故事型游戏的燃料

在故事型游戏中,冲突是推动情节发展的关键因素。没有冲突,故事就会变得平淡无奇,缺乏吸引力。在这篇博客中,我将探讨冲突在故事型游戏中的重要性,以及如何利用冲突为游戏增色添彩。 首先,让我们来了解一下冲…

【Ajax零基础教程】-----第一课 Ajax简介

一、什么是ajax ajax即 Asynchronous javascript And XML (异步 javaScript 和 XML) 是一种创建交互式,快速动态应用的网页开发技术,无需重新加载整个网页的情况下,能够更新页面局部数据的技术。 二、为什么使用Ajax 通过在后台与服务器进行少…

水表集中抄表器是什么?什么叫水表集中抄表器?

1.简述 水表集中抄表器是一种智能化的智能设备,主要运用于高效率、清晰地收集管理方法住户或商业客户的用水数据信息。它摒弃了传统的人工抄表方法,完成了远程控制全自动抄表,大大提高了水务管理的效率和精确性。 2.功能特点 2.1实时数据分…

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码api代开发

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码官方平台api授权代开发 一、短视频矩阵系统源码开发步骤 短视频矩阵系统的源头开发步骤通常包括以下几个关键阶段: 1.需求分析:明确系统的目标用户、功能需求、性能要求等。 2.系统设计&…