Scrapy爬虫框架使用&介绍

本文详细介绍了Scrapy框架的使用,包括框架创建、执行过程、settings文件配置、图片抓取与存储、以及分布式设置。通过实例演示了如何编写爬虫并处理图片下载,有助于理解Scrapy框架的工作原理。
摘要由CSDN通过智能技术生成
1.scrapy框架的简述

        高性能,高层次的web数据提取框架;

2.使用框架

# 框架创建完成的展示

2.1 框架的创建

首先需要导入对应的第三方模块:pip install scrapy

创建爬虫项目文件:

scrapy startproject woyaogexing  # 创建项目  woyaogexing 可以自己命名

先 cd woyaogexing 到文件目录下,创建爬虫文件

scrapy genspider gexing www.woyaogexing.com   # gexing 爬虫文件名,目标网站

3.框架执行

scrapy crawl gexing   # 控制台执行

当然如果想在python文件中执行程序

new main.py

内容如下:

from scrapy.cmdline import execute

if __name__ == '__main__':
    execute('scrapy crawl gexing'.split())
4.settings文件介绍
ROBOTSTXT_OBEY = True  # robot协议,无法获取内容需要改成False
LOG_LEVEL = 'ERROR'  # 日志太多不好看获取的信息,设置日志级别
5.爬虫文件编写

1.分析页面元素,提取想要的内容[这里想要获取的是图片]

源代码中搜索:lazy

或者在控制台搜索lazy,为什么,因为框架获取的就是源代码:

通过在获取的源代码中搜索无法搜索想要的内容:

原因分析:

1.当前网页发现了我这个爬虫:

前往middlewares.py文件下项目文件名+DownloaderMiddleware

找到process_request的类方法,打印headers

配置文件中打开中间件相关配置,如下:

user-agent使用的是scrapy的,我们将他修改成浏览器的user-agent:

这里有两种修改方式:

1.直接打开浏览器的f12下的网络,点击一个api复制一个user-agent到配置文件中

2.直接在刚刚的middlewares下的process_request类方法中设置headers:

设置完成对应的headers后再进行搜索:

发现还是没有;

2.检查请求的链接和分析的链接是否一致:

通过对比发现请求的不是分析的地址,修改此链接地址或者使用

start_requests方法进行链接构造:

修改完成后,在进行搜索

发现和分析网页的元素一致;

编写爬虫文件,提取指定的图片和图片名称:

存储图片需要:图片的名称加上后缀名,例如:a.jpg

通过分析网页发现图片没有对应的协议,需要再链接前面拼接http/https

 6.将对应的内容以scrapy对应的存储方式进行存储

在items按照对应的模板给需要存储的内容使用scrapy对象定义字段

再到spider爬虫文件中导入items下的类

再将对应的内容返回:在编写的爬虫文件中的类方法parse中添加

yield item
 7.下载图片

在对应的pipeline的文件下继承image的pipeline

from scrapy.pipelines.images import ImagesPipeline
import scrapy

使用对应的:

def get_media_requests(self, item, info):
        发送请求,下载图片
    yield scrapy.Request(url=item['image_url'], meta={'name': item['image_name']})   
def file_path(self, request, response=None, info=None):
        修改文件名与保存路径
    return request.meta['name']
def item_completed(self, results, item, info):
    查看存储结果
    print(results)
    return results

在对应settings文件中打开:

IMAGES_STORE:scrapy框架下图片存储路径的配置参数

8.执行结果

 记录scrapy分布式的配置参数
settings配置文件改写如下:
# 替换 SHCEDULER,使用scrapy_redis进行任务分发与调度
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
# 使用 scrapy_redis 去重队列:
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

# 使用 ‘优先级队列’进行爬虫调度,即各个主机获取请求的先后次序:
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
# 在 redis 中保持 scrapy-redis 用到的各个队列,从而允许暂停和暂停后恢复
SCHEDULER_PERSIST = True  # 持久化
REDIS_HOST = '127.0.0.1'  # redis主机
REDIS_PORT = 6379  # redis端口
REDIS_ENCODING = "utf-8"
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 200,
    'Gushici_Scrapy.pipelines.GushiciScrapyPipeline': 300,
}

spider爬虫文件改写:

from scrapy_redis.spiders import RedisSpider # 继承redis的spider        
class spider(RedisSpider):
        # start_urls = ['https://目标域名/']
        redis_key = '建立的_key'

redis给程序执行网址:  lpush  redis_key  定义的名称   url 目标网址

 结束语

        此次分享与回忆学习结束,但愿能帮助到你

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值