首页 > 其他分享 >SCRAPY入门学习(待完善)

SCRAPY入门学习(待完善)

时间:2024-09-02 22:14:36浏览次数:11  
标签:完善 入门 Scrapy Spider item SCRAPY 引擎 爬虫 请求

Scrapy介绍

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。

Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

Scrapy的运作流程

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
触发时段:
初始化阶段:当Scrapy启动时,引擎会初始化调度器。
请求入队:每当有新的请求生成(例如在start_requests方法或在parse方法中生成新的请求),这些请求都会被发送到调度器。
请求出队:当下载器空闲并准备处理新的请求时,调度器会将下一个请求出队并发送给下载器。
去重处理:调度器会检查新请求是否已经存在于队列中,以避免重复处理。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载失败的URL,Scrapy也会重新下载。)

制作 Scrapy 爬虫 一共需要4步:

新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
明确目标 (编写items.py):明确你想要抓取的目标
制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
存储内容 (pipelines.py):设计管道存储爬取内容

安装教程略

练习

以爬取https://www.4399.com/flash/的游戏名、日期、分类为例:
查看html结构(只爬取最新小游戏信息)

创建好爬虫项目:scrapy startproject pj1

xiao.py

import scrapy


class XiaoSpider(scrapy.Spider):
    name = "xiao"
    allowed_domains = ["4399.com"]
    start_urls = ["https://www.4399.com/flash/"]#可以添加多个url

    def parse(self, response):
    # txt=response.xpath('/html/body/div[8]/ul/li/a/b/text()').extract()
        l=response.xpath('/html/body/div[8]/ul/li')
        lst=[]
        for i in l:
            name=i.xpath('./a/b/text()').extract_first()
            catagroy=i.xpath('./em/a/text()').extract_first()
            date=i.xpath('./em/text()').extract_first()
            dic={"name":name,"catagroy":catagroy,"date":date}
            yield dic # 传给管道的item变量
        

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


class Pj1Pipeline:
    def process_item(self, item, spider):
        print(item)#管道处理方式可以自定义,如写入文件,存入数据库等

        return item
class rPipeline: #除了初始管道,还可以自定义新管道
    def process_item(self, item, spider):
        item['love']='hyx'
        return item

设置管道优先级(先传入哪个管道处理数据,处理完再传入哪个管道)

请求头添加方法

1.setting.py里面添加

2.中间件添加

3.spider里面添加
在你创建的spider里面写个start_requests方法

标签:完善,入门,Scrapy,Spider,item,SCRAPY,引擎,爬虫,请求
From: https://www.cnblogs.com/hackzz/p/18393643

相关文章

  • LangChain入门指南,轻松学习,助你游刃有余
    一、前言像OpenAI的GPT-4这样的大型语言模型(LLM)已经风靡全球。它们可以自动执行各种任务,如回答问题、翻译语言、分析文本等等。LLM是第一种真正让人感觉像是“人工智能”的机器学习类型。然而,在实际产品中应用LLM仍存在挑战。特别是LLM管理,这是其中最棘手和繁琐的挑战之......
  • Linux系统入门:企业服务与安全管理
    Linux系统入门:企业服务与安全管理......
  • [20240902]建立完善sql_idz.sh脚本.txt
    [20240902]建立完善sql_idz.sh脚本.txt--//增加hash_value的16进制显示采用大小写显示.$cat-v~/bin/sql_idz.sh#!/bin/bash#calcucatesql_textoffull_hash_value(16),hash_value(10),sql_id(32).#argv1sqlstatementorsqloftextfile#argv2flag:0=sqlstatement......
  • Lucas定理入门
    前置结论如果\(p\)为素数,有以下结论:\(a^p\equiva\pmodp\)即费马小定理\[C_{p}^i\equiv\begin{cases}1&i=0或者i=p\\0&其他情况\end{cases}\pmodp\]证明可以展开\((a+b)^p\equiva^p+b^p\pmodp\)证明1:用结论1\[\begin{aligned}(a+b)^p......
  • Transformer模型入门:简单而直观的解释
    Transformer模型入门:简单而直观的解释引言你是否曾经对现代人工智能如何理解和生成人类语言感到好奇?今天,我们将以一种前所未有的简单方式来解释Transformer模型-这个革命性的AI架构。Transformer的核心:问答结构想象一下,如果我们可以将所有的问题都简化为"问题-答......
  • 【OpenCV】快速入门(二)--视频处理(1)
    OpenCV–视频处理先看代码#include<iostream>#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"intmain(intargc,char**argv){cv::namedWindow("Example3",cv::WINDOW_AUTOSIZE);cv::VideoCaptu......
  • 学习Python多久才能入门?
    转行学习编程,Python语言是大多数人的首要选择。因为它不仅在web开发、游戏开发、数据分析、网络爬虫等领域有着优异的表现,更是人工智能和机器学习的首选语言,那么学会Python大概需要多久?我们一起来看看吧。学习Python所需的时间取决个人的学习速度、学习目标和学习方式。......
  • 信息学奥赛初赛天天练-82-NOIP2014普及组-完善程序-机器语言、汇编语言、高级语言、计
    1NOIP2014普及组基础题11以下哪个是面向对象的高级语言()A汇编语言BC++CFortranDBasic2TB代表的字节数是()A2的10次方B2的20次方C2的30次方D2的40次方3二进制数00100100和00010101的和是()A00101000B001010......
  • Arduino基础入门学习——使用DHT11温湿度传感器获取温湿度
    使用DHT11温湿度传感器获取温湿度一、前言二、DHT11介绍三、准备工作四、程序代码五、运行结果六、结束语一、前言老规矩,再来一句名言激励激励大家,当然,也激励自己(狗头):             读书百遍,其义自见。——晋·陈寿二、DHT11介绍DHT11采用单总线......
  • python入门每日一练2023/2/10
    python入门每日一练,可以提高您的python水平,今天是2月10日,上一课的答案是foriinrange(8):print(i)qq="xxxxxxxxx"email="@qq.com"如何将上面的字符串组成一段邮箱地址?......