首页 > 其他分享 >Scrapy爬虫框架

Scrapy爬虫框架

时间:2024-01-21 11:55:20浏览次数:34  
标签:框架 self 中间件 爬虫 item Scrapy scrapy

网络爬虫框架:Scrapy

Scrapy是一个非常优秀的爬虫框架,通过Scrapy框架,可以非常轻松的实现强大的爬虫系统。

一、Scrapy简介

Scrapy主要包括如下6个部分:
  • Scrapy Engine:用来处理整个系统的数据流,触发各种事件。
  • Scheduler:从URL队列中取出一个URL。
  • Downloader:从internet上下载web资源。
  • Spider:接收下载器下载的原始数据,作进一步的处理。
  • Item Pipeline:接收网络爬虫传过来的数据,以便做进一步处理。
  • 中间件:整个Scrapy框架有很多中间件,如下载中间件、网络爬虫中间件等。这些中间件相当于过滤器,夹在不同部分之间截获数据流,并进行特殊的加工处理。

二、创建项目

以下操作全部是在pycharm的终端里写的
1、创建scrapy项目的命令:scrapy startproject 项目名字
2、以下是在创建项目后会进行提示的,根据提示创建爬虫,注意example只是一个例子,这个可以自己随便写。

示例:

cd 项目名字 这一步是进入当前项目路径

scrapy genspider example example.com 再创建爬虫文件

现在对创建的几个py文件进行说明(有的需要自己手动修改):

1、scrapy.cfg 详细项目配置文件,不需要做改动
2、items.py 定义数据存储模型

以下仅仅是一个实例:

# Define here the models for your scraped items

# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

# 实际是一个模板类  主要是用来定义数据存储模型
# 通过这个类实例化 数据实际存到实例(对象)中
class MyspiderItem(scrapy.Item):
    # 实际是一个模板类(数据建模) 事先定义好你要爬取的字段
    name = scrapy.Field()  # 租房标题
    content = scrapy.Field() # 详情信息
    price = scrapy.Field()  # 价格
    link = scrapy.Field() # 详情链接
3、middlewares.py 用于编写中间件(下载中间件+爬虫中间件) -- 无特殊需求,一般不需要编写。
4、pipelines.py 管道 -- 主要用于编写数据处理步骤 (数据的清洗+保存),以下代码有些我们需要手动改变,大家创建时需要注意。
# 需要手动修改成自己浏览器的UA
USER_AGENT = 'mySpider (+http://www.yourdomain.com)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False # 需要手动修改为False
# 注意:如果只设置浏览器代理获取不了数据,那么需要手动开启下面的代码,将需要的请求头传入
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}
# 开启管道类才能写入数据
ITEM_PIPELINES = {
   'mySpider.pipelines.MyspiderPipeline': 300,
}
5、最后,在自己创建的爬虫里面获取数据

以下是一个示例:

import scrapy

class LianjiaSpider(scrapy.Spider):
    # 爬虫名字
    name = 'lianjia'
    # 限定爬取的域名范围
    allowed_domains = ['cs.lianjia.com']
    # 起始请求的URL,一开始这个是需要根据自己的url进行修改
    start_urls = ['https://cs.lianjia.com/zufang/']
    
    # 该方法会接受下载中间件传过来的response,并对其进行解析
    def parse(self, response):
        #注意:这里不用再使用requests获取源代码,scrapy框架已经为我们处理了,我们直接用xpath语法进行解析即可。
        pass

三、定位元素以及提取数据、属性值的方法

解析并获取scrapy爬虫中的数据:利用xpath规则字符串进行定位和提取

1、response.xpath方法的返回结果是一个类似list类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
2、额外方法extract():返回一个包含字符串的列表
3、额外方法extract_first():返回列表的第一个字符串,列表为空没有返回None

四、保存数据

利用管道pipeline来处理(保存)数据

以下是对保存数据的一个示例(仅供参考)

# 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
import json

from itemadapter import ItemAdapter

class MyspiderPipeline:
    def __init__(self):
        self.file = open('lianjia.json','w')

    # 爬虫文件中提取数据的方法每yield一次item,就会运行一次
    # 该方法为固定名称函数
    def process_item(self, item, spider):
        # 参数item默认是一个 <class 'mySpider.items.MyspiderItem'>类信息,需要处理成字典
        dict_data = dict(item)
        print(type(item), type(dict_data))
        # 将返回的字典数据转为JSON数据
        json_data = json.dumps(dict_data,ensure_ascii=False)+',\n'
        # 写入JSON数据
        self.file.write(json_data)
        # 参数item:是爬虫文件中yield的返回的数据对象(引擎会把这个交给管道中的这个item参数)
        print("建模之后的返回值:",item,)
        # 默认使用完管道之后将数据又返回给引擎
        return item
	#实现自动关闭文件
    def __del__(self):
        self.file.close()

标签:框架,self,中间件,爬虫,item,Scrapy,scrapy
From: https://www.cnblogs.com/wjx-2005-07-01/p/17977681

相关文章

  • selenium4框架学习
    selenium4框架学习https://blog.csdn.net/qq_45158700/article/details/135363339浏览器驱动&selenium文档下载SeleniumwithPython中文翻译文档:https://selenium-python-zh.readthedocs.io/en/latest/下面链接中为103.0.5060.53版本的浏览器和对应的chromedriver​ 链接:ht......
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.0版已发布
    关于MobileIMSDKMobileIMSDK是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、小程序、Uniapp、标准Java平台,服务端基于Netty编写。工程开源地址是:1)Gitee码云地址:https://gitee.com/ja......
  • Spring基础 - Spring和Spring框架组成
    什么是Spring?Spring的起源要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望。曾经使用过EJB开发JAVAEE......
  • 数据质量框架QUalitis浅尝使用
    数据质量管理平台(微众银行)Qualitis+Linkis(一)Qualitis是一个数据质量管理系统,用于监控数据质量。其功能包括:数据质量模型定义数据质量结果可视化可监控数据质量管理服务提供一整套统一的流程来定义和检测数据集的质量并及时报告问题(二)Linkis属于上层应用程序和底层引......
  • 网络爬虫-----爬虫的分类及原理
    爬虫的分类网络爬虫按照系统结构和实现技术,大致可分为4类,即通用网络爬虫、聚焦网络爬虫、增量网络爬虫和深层次网络爬虫。1.通用网络爬虫:搜索引擎的爬虫比如用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关的再根据一定的排名规则进行排......
  • VUE框架MVVM架构思想解析与实现封装dom对象------VUE框架
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • PHP学习第七天:框架开发与自动化工具
    在PHP学习的第七天,我深入了解了框架开发和自动化工具的使用。早上,我学习了如何使用PHP框架来加速Web应用程序的开发。PHP框架提供了一套预先构建的组件和工具,可以简化开发过程并提高应用程序的可靠性。我学习了Laravel和Symfony这两个流行的PHP框架,并了解了它们的核心概念和特性。......
  • hyperexpress框架/使用uwebsockets.js核心
    import{scheduleJob}from'node-schedule';//定时任务functionsetupScheduledTasks(){//每6秒执行一次setInterval(()=>{taskEverySixSeconds();},6000);//每33分钟执行一次setInterval(()=>{taskEve......
  • 基于flask框架的python作为微信小程序后端的实现方法(个人版)
    Flask基础语法引入Flask类fromflaskimportFlask创建一个app,也就是Flask类的一个对象app=Flask(__name__)接下来写每个路径对应的函数如@app.route('/')deftest()#这里函数可以任意命名,这个函数会在访问括号里路径的时候被调用 return"helloworld"这三行代码......
  • jax框架:jax.grad
    官方地址:https://jax.readthedocs.io/en/latest/_autosummary/jax.grad.html#jax.grad这里只给出几个样例代码:设置allow_int参数,实现对整数类型求导:未对整数类型求导:importjaxdeffun(x,y):print(x,y)returnjax.numpy.sum(2*x[0]+y[0]+2*x[1]+......