爬虫:scrapy基本使用:链家实例

news2024/11/17 16:32:13

scrapy基本使用

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。

安装scrapy:

        1. 安装pywin32         - Microsoft Windows的Python扩展提供对大部分Win32 API的访问,创建和使用COM对象的能力以及Pythonwin环境。    - 不论电脑是32位还是64位都可以选择安装。         - pip install pywin32

        2. 安装wheel         - pip install wheel

        3. 下载Twisted          - Twisted是用Python实现的基于事件驱动的网络引擎框架。                   - pip install twisted

        4. 安装 scrapy框架         pip install scrapy

        5. 验证:在cmd输入scrapy没有报错则安装成功

scrapy工作流程

制作一个scrapy爬虫需要四步:

        1.创建一个Scrapy项目

        2.定义提取的结构化数据(Item)

        3.编写爬取网站的 Spider 并提取出结构化数据(Item)

        4.编写 Item Pipelines 来存储提取到的Item(即结构化数据)

1.新建项目

说明:在开始爬取之前,必须创建一个新的Scrapy项目。进入自定义的项目目录中,运行下列命令:

-使用命令:scrapy startproject mySpider

其中需要再终端中执行。其中,scrapyDemo01为项目名称,可以看到将会创建scrapyDemo01 文件夹,目录结构大致如下图:

2.明确爬取目标

         打开mySpider目录下的items.py,以爬取链家的信息为例,

上面的你创建第一个class项目自动生成的,它实例了怎么去定义一个存储的字段

下面的是我们刚才创建的链家项目,这里我们定义好了标题,位置信息,房子的信息,总价及一平米的价格的字段。

3.制作爬虫

        爬虫功能分两步: 爬数据和取数据 

爬数据

创建好scrapyDemo01项目之后,在终端输入 

cd scrapyDemo01

scrapy genspider lianjia lianjia.com

spider路径下的lianjia.py文件

为什么使用yield,而不使用return??

因为yield返回之后还可以执行接下来的内容 而return不行

要建立一个Spider, 你必须用scrapy.Spider类创建一个子类,并确定了三个强制的属性 和 一个方法。

- `name = ""` :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。

- `allow_domains = []` 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,一般把它要注释掉

- `start_urls = ()` :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。

- `parse(self, response)` :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:   1. 负责解析返回的网页数据(response.body),提取结构化数据(生成item)   2. 生成需要下一页的URL请求。

执行爬虫,使用命令: scrapy crawl lianjia

log日志:

        如果再出现的结果中出现了很多其他的信息,不需要恐慌,这是它的日志信息。 scrapy日志信息分四级: ERROR :一般错误。 WARNING : 警告。 INFO : 一般信息 。DEBUG : 调试信息 。默认的显示级别是DEBUG

        在settings.py配置文件中,加入LOG_LEVEL = ‘指定日志信息种类’即可。LOG_FILE = 'log.txt'则表示将日志信息写入到指定文件中进行存储。一般使用LOG_LEVEL = WARING。

4.保存爬虫信息:

        pipelines文件中自定义了一个process_item方法,用来给我们处理保存的信息。,第一个Scrapydemo01Pipeline是自动生成的一个方法,它实例了一个怎么保存信息的方法。

        在创建lianjia的保存方法时,要创建一个生命周期

# 生的时候做什么事情, 再开始爬虫的时候会被调用一次

def open_spider(self,spider):

# 死的时候做什么事情, 结束爬虫的时候被调用一次

def close_spider(self,spider): 

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

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

相关文章

【原创】java+swing+mysql的KTV管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景: 随着社会的发展…

语义分割:YOLOv5的分割模型训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、环境搭建二、构建数据集三、修改配置文件①数据集文件配置②权重下载③模型文件配置④训练参数配置 四、模型训练和测试模型训练模型测试 总结 前言 提示:本文是YOLOv5的分割模型训练自己数据集的记录教程,在调试前需要本地已配置好CU…

测试资料1111

什么是软件 软件是控制计算机硬件工作的工具 软件产生过程 需求产生(客户、用户)、需求文档(需求文档)、设计效果图(UI设计师)、产品开发(研发人员)、产品测试(测试人…

multiple definition of `xxxx`问题解决(vscode开发stm32)

一、背景 开发时遇到如下问题: 在Tim.h文件夹中定义了一个结构体变量 TIM_HandleTypeDef htim2;//定时器实例变量 其余的文件在引用此变量时都加上了#include "Tim.h" 但编译时,终端报错: multiple definition of htim2 全局搜…

hs_err_pid.log分析

hs_err_pid.log 文件是 Java 虚拟机(JVM)在遇到致命错误(如崩溃或内部错误)时生成的错误日志文件。这个文件包含了关于崩溃的详细信息,可以帮助开发者或系统管理员诊断和解决问题。 hs_err_pid.log文件位置和命名 文…

maven导入依赖后依然爆红?

今天遇到了maven导入依赖后依然爆红的问题,检查了本地仓库发现依赖包已经全有了但是IDEA这边的XML文件里面依然大量爆红;并且我重新将之前的本地仓库相关的依赖包甚至其上级目录进行了删除后重新导入,但问题依然没有解决;因此我非…

【大模拟】逻辑回环类

区块链 AcWing 3285. 区块链 - AcWing 区块链涉及密码学、哈希算法、拜占庭问题、共识算法、故障模型、网络模型等诸多知识,也在金融等领域有广泛的应用。 本题中,我们需要实现一个简单的区块链系统。 在一个分布式网络中,有 nn 个节点通…

最新软件库系统源码/ 免服务器源码/带后台功能/使用链接上传或服务器存储

源码简介: 最新软件库系统源码,它是免服务器的,而且带后台,实现超级管理动态发布,会员系统卡密系统充值的后台功能。注册用户的软件投稿,可以使用链接上传,或者服务器存储。 它带有后台功能&a…

Springboot 整合 Swagger3(springdoc-openapi)

使用springdoc-openapi这个库来生成swagger的api文档 官方Github仓库: https://github.com/springdoc/springdoc-openapi 官网地址:https://springdoc.org 目录题 1. 引入依赖2. 拦截器设置3. 访问接口页面3.1 添加配置项,使得访问路径变短…

饮水机功能构建指导思想以及最小试验

饮水机功能构建指导思想以及最小试验 引言 我们饮水机, 其实就只有两个必须使用的功能, 一个是控制加热, 一个是控制放水, 我们现在就可以直接实现这两个功能. 我们使用stm32单片机, 直接控制两个io口的高低电平, 通过继电器, 就可以控制大电流设备的开关. 没错这就已经结束了…

时间序列预测 | CEEMDAN+CNN+Transformer多变量时间序列预测(Python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时间序列预测 | CEEMDANCNNTransformer多变量时间序列预测(Python) 时间序列预测 创新点 多尺度特征提取:CEEMDAN将复杂的时间序列分解成多个IMFs,使得CNN和Transforme…

【TVM 教程】在 Adreno™ 上部署预训练模型

本文是一个逐步教程,演示如何在 Adreno 上(不同精度)部署预训练的 PyTorch ResNet-18 模型。 首先,我们需要安装 PyTorch 与 TorchVision,因为我们将使用它作为我们的模型库。 可以通过 pip 快速安装: p…

【Linux】Linux环境基础开发工具使用之Linux编译器-gcc/g++使用

目录 一、编译过程二、gcc/g如何完成三、error: for loop initial declarations are only allowed in C99 mode 的解决方法四、预处理五、编译六、汇编七、链接八、数据库8.1 动态库8.2 静态库8.3 动/静态链接的优缺点 结尾 一、编译过程 预处理(头文件的展开、宏替…

计算机网络12——IM聊天系统——项目分析和架构搭建

1、IM——聊天系统主要功能 (1)注册 根据:昵称,手机号,密码 (2)登录 根据:手机号,密码 (3)添加好友 根据:昵称 (4&…

【IR】Counterfactual Explainer on Graphs

图神经网络的反事实解释:最新文章略读 Survey [ 5 ] ^{[5]} [5]CFAD [ 1 ] ^{[1]} [1]CAF [ 3 ] ^{[3]} [3]GCFExplainer [ 2 ] ^{[2]} [2]CFE [ 4 ] ^{[4]} [4]RCExplainer [ 6 ] ^{[6]} [6]CF-GNNExplainer [ 7 ] ^{[7]} [7]Ref Survey [ 5 ] ^{[5]} [5] NeurIP…

Ubuntu24.04使用SRS 搭建 RTMP流媒体服务器

一、简介 SRS(Simple Realtime Server)是一个简单高效的实时视频服务器, 是国人写的一款非常优秀的开源流媒体服务器软件,可用于直播/录播/视频客服等多种场景,其定位是运营级的互联网直播服务器集群。支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28…

基于html5的网上团购系统设计与实现

TOC springboot301基于html5的网上团购系统设计与实现 第1章 绪论 1.1 研究背景 互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代,也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端,也就是电脑互联网时…

编码在左,学习在右,你心中的天平如何倾斜?

目录 前言 程序员如何平衡日常编码工作与提升式学习? 养成高效编码习惯 掌握时间管理技巧 提升式学习的策略 广泛涉猎的优势与考虑因素 深入钻研的优势与考虑因素 职业发展与个人成长的和谐共生 结束语 前言 程序员如何平衡日常编码工作与提升式学习&#…

vue项目配置基础路由vue-router

1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹,在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…

demo测试

目录 接口commonCodeGenerator entityuser mapperUserMapper controllerUserController serviceUserServiceimplUserServiceImpl mapper.xmlpom.xmlapplication.yml 接口 common CodeGenerator package com.llz.demo.common;import com.baomidou.mybatisplus.core.exceptions…