Python 爬虫之 Scrapy(带例子)macOS 环境

1、概念

Scrapy是一个Python编写的开源网络爬虫框架,它是一个被设计用于爬取网络数据、提取结构性数据的框架。

Scrapy 使用了Twisted异步网络框架,可以加快我们的下载速度。

官方文档地址:Scrapy

2、工作流程

  • 爬虫中起始的url构造成request对象 —> 爬虫中间件 —> 引擎 —> 调度器
  • 调度器把request —> 引擎 —> 下载中间件 —> 下载器
  • 下载器发送请求,获取response响应 —> 下载中间件 —> 引擎 —> 爬虫中间件 —> 爬虫
  • 爬虫提取url地址,组装成request对象 —> 爬虫中间件 —> 引擎 —> 调度器,重复步骤2
  • 爬虫提取数据 —> 引擎 —> 管道处理和保存数据

2.1 基本爬虫流程

在这里插入图片描述

2.2 基本爬虫模块关系

在这里插入图片描述

2.3 Scrapy工作流程

在这里插入图片描述

3、Scrapy中每个模块的具体作用

在这里插入图片描述

4、实例(美剧天堂最近100更新内容爬取)

在这里插入图片描述

4.1 创建工程

cd Desktop # 我习惯项目都放在桌面
Scrapy startproject movie

在这里插入图片描述
可在桌面看到带有如下目录的文件夹,那么工程就创建成功了。

在这里插入图片描述

4.2 创建爬虫程序

cd movie # 用 cd 先进入 movie 目录
Scrapy genspider meiju meijutt.tv # 创建了一个叫 meiju 的爬虫

在这里插入图片描述
查看 spiders 目录可以看到多了一个 meiju.py,就是我们刚创建的爬虫。

4.3 编辑爬虫

  • pipelines和items文件,负责将Spider(爬虫)传递过来的数据进行保存。具体保存在哪里,应该看开发者自己的需求。
  • middlewares用来定义和实现中间件的功能
  • settings 整个项目的配置文件
  • spiders/目录下是我们的爬虫文件

4.3.1 meiju.py

import scrapy
from movie.items import MovieItem


class MeijuSpider(scrapy.Spider):  # 继承这个类
    name = 'test'  # 名字
    allowed_domains = ['meijutt.tv']  # 域名
    start_urls = ['https://www.meijutt.tv/new100.html']  # 补充完整网址

    def parse(self, response):
        movies = response.xpath('//ul[@class="top-list  fn-clear"]/li')   # 选中所有的属性class值为"top-list  fn-clear"的ul下的li标签内容
        for each_movie in movies:
            item = MovieItem()
            item['number'] = each_movie.xpath('.//div[@class="lasted-num fn-left"]//text()').extract()[0]  # 提取影片序号
            item['name'] = each_movie.xpath('.//h5/a//text()').extract()[0]  # 提取影片名
            item['url'] = each_movie.xpath('.//h5/a/@href').extract()[0]  # 提取影片网址
            item['time'] = each_movie.xpath('.//div[@class="lasted-time new100time fn-right"]//text()').extract()[0]  # 提取影片更新时间
            yield item  # 一种特殊的循环

4.3.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 MovieItem(scrapy.Item):
    # define the fields for your item here like:
    number = scrapy.Field()
    name = scrapy.Field()
    url = scrapy.Field()
    time = scrapy.Field()
    # pass

4.3.3 设置配置文件 settings.py

添加上这一句:

ITEM_PIPELINES = {
    
    'movie.pipelines.MoviePipeline': 100}

4.3.4 设置数据处理脚本 pipelines.py

import json

class MoviePipeline(object):
    def process_item(self, item, spider):
        return item

4.4 启动爬虫

在爬虫程序 meiju.py 目录下启动终端

Scrapy crawl test # 启动的名字和你前面给他取的名字对应,注意不是文件名!!!也不是函数名!!!

在这里插入图片描述

出现如下图所示,就是成功爬取我们需要的内容了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a6661314/article/details/124673353#comments_25027489
今日推荐