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 # 启动的名字和你前面给他取的名字对应,注意不是文件名!!!也不是函数名!!!

在这里插入图片描述

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

本文作者:Dancing-Pierre

本文链接:https://www.cnblogs.com/wyc-1009/p/17548031.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Dancing-Pierre  阅读(29)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起