Python爬虫之Scrapy框架(案例练习)

Posted SYFStrive

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫之Scrapy框架(案例练习)相关的知识,希望对你有一定的参考价值。

@作者 : SYFStrive

@博客首页 : HomePage

🥧 上一篇续文传送门

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:如果觉得文章对你有帮助可以点点关注 👉:专栏连接🔗

🥧: 感谢支持,学习累了可以先看小段由小胖给大家带来的街舞😀

🔗:
阅读文章

目录


简介

  1. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据 (例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
  2. Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。
  3. 提示:Twisted 是一个基于事件驱动的网络引擎框架,同样采用 Python 实现。

📦Scrapy使用前准备

  • 文档如👇
  1. 官网文档:链接
  2. C语言中文文档:链接
  • 安装
  1. 安装语法:python -m pip install Scrapy
  2. 报错:使用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn 加包名

yield的使用

  1. 带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代
  2. yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行
  3. 简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始

Python爬虫之Scrapy框架之🔔🔔爬取数据

get

案例使用的内容

涉及 单管道、多管道

单管道

📰代码演示:

多管道(单独使用一个管道下载图片……)

📰代码演示:

如下图(下载成功🆗):

实现多页面下载 (爬取100页内容)

📰代码演示:

如下图(下载成功🆗):

案例总结

  1. 两个生命函数
    # 在爬虫文件开始的之前就执行的一个方法
    # def open_spider():
    # 在爬虫文件执行完之后  执行的方法
    # def close_spider():
  1. 简单步骤:获取数据后 👉 使用items 定义数据结构的 👉 导入items(传递数据) 👉 使用Yield返回 👉 通过pipelines管道下载数据(使用前要开启管道(item就是yield后面的book对象))

  2. 添加管道:定义管道类 👉 在settings中开启管道

  3. 注意:
    1、如果是多页下载的话 那么必须要调整的是allowed_domains的范围 一般情况下只写域名
    2、write方法必须要写一个字符串 而不能是其他的对象
    3、通过该案例检测的一点就是下载的图片目录文件是spiders下的理解如:‘./bookImg/’ + item.get(‘name’) + ‘.jpg’

post

效果如下:

Python爬虫之Scrapy框架之🎦爬取数据

📰代码演示:

📰代码演示:

class DianyingtiantangPipeline:

    def open_spider(self, spider):
        self.fs = open('movie.json', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        # 简单理解:这里的item相当于yield movie返回值
        self.fs.write(str(item))

        return item

    def close_spider(self, spider):
        self.fs.close()

如下图(下载成功🆗):

最后

Scrapy框架还未结束(待更),觉得不错的请给我专栏点点订阅,你的支持是我们更新的动力,感谢大家的支持,希望这篇文章能帮到大家

点击跳转到我的Python专栏

下篇文章再见ヾ( ̄▽ ̄)ByeBye

新手必学Python爬虫之Scrapy框架案例详解

 

技术图片

Scrapy简介

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

框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。另外要注意:光理论是不够的。这里顺便送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!

Scrapy 使用了 Twisted[‘tw?st?d](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

Scrapy架构

技术图片

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

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

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)

白话讲解Scrapy运作流程

代码写好,程序开始运行...

1.引擎:Hi!Spider, 你要处理哪一个网站?

2.Spider:老大要我处理xxxx.com。

3.引擎:你把第一个需要处理的URL给我吧。

4.Spider:给你,第一个URL是xxxxxxx.com。

5.引擎:Hi!调度器,我这有request请求你帮我排序入队一下。

6.调度器:好的,正在处理你等一下。

7.引擎:Hi!调度器,把你处理好的request请求给我。

8.调度器:给你,这是我处理好的request

9.引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求

10.下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)

11.引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)

12.Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。

13.引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。

14.管道``调度器:好的,现在就做!

相关推荐:《Python相关教程》

制作Scrapy爬虫步骤

1.新建项目

scrapy startproject mySpider

技术图片

scrapy.cfg :项目的配置文件
mySpider/ :项目的Python模块,将会从这里引用代码
mySpider/items.py :项目的目标文件
mySpider/pipelines.py :项目的管道文件
mySpider/settings.py :项目的设置文件
mySpider/spiders/ :存储爬虫代码目录

2.明确目标(mySpider/items.py)

想要爬取哪些信息,在Item里面定义结构化数据字段,保存爬取到的数据。

3.制作爬虫(spiders/xxxxSpider.py)

import scrapy
class ItcastSpider(scrapy.Spider):
    name = "itcast"
    allowed_domains = ["itcast.cn"]
    start_urls = (
        ‘http://www.itcast.cn/‘,
    )
    def parse(self, response):
        pass

name = "" :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。

allow_domains = [] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。

start_urls = () :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。

parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:

4.保存数据(pipelines.py)

在管道文件里面设置保存数据的方法,可以保存到本地或数据库。

温馨提醒

第一次运行scrapy项目的时候,出现-->"DLL load failed" 错误提示,需要安装pypiwin32模块。   

简单入门的实例

 (1)items.py

想要爬取的信息

# -*- coding: utf-8 -*-
import scrapy
class ItcastItem(scrapy.Item):
    name = scrapy.Field()
    title = scrapy.Field()
    info = scrapy.Field()

(2)itcastspider.py

写爬虫程序

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import scrapy
from mySpider.items import ItcastItem
# 创建一个爬虫类
class ItcastSpider(scrapy.Spider):
    # 爬虫名
    name = "itcast"
    # 允许爬虫作用的范围
    allowd_domains = ["http://www.itcast.cn/"]
    # 爬虫起始的url
    start_urls = [
        "http://www.itcast.cn/channel/teacher.shtml#",
    ]
    def parse(self, response):
        teacher_list = response.xpath(‘//div[@class="li_txt"]‘)
        # 所有老师信息的列表集合
        teacherItem = []
        # 遍历根节点集合
        for each in teacher_list:
            # Item对象用来保存数据的
            item = ItcastItem()
            # name, extract() 将匹配出来的结果转换为Unicode字符串
            # 不加extract() 结果为xpath匹配对象
            name = each.xpath(‘./h3/text()‘).extract()
            # title
            title = each.xpath(‘./h4/text()‘).extract()
            # info
            info = each.xpath(‘./p/text()‘).extract()
            item[‘name‘] = name[0].encode("gbk")
            item[‘title‘] = title[0].encode("gbk")
            item[‘info‘] = info[0].encode("gbk")
            teacherItem.append(item)
        return teacherItem

输入命令:scrapy crawl itcast -o itcast.csv  保存为 ".csv"的格式

最后注意:光理论是不够的。这里顺便送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。


以上是关于Python爬虫之Scrapy框架(案例练习)的主要内容,如果未能解决你的问题,请参考以下文章

新手必学Python爬虫之Scrapy框架案例详解

新手必学Python爬虫之Scrapy框架案例详解

Python爬虫之Scrapy框架结构

Python爬虫之Scrapy框架系列——settings.py配置文件的学习

Python爬虫之Scrapy框架系列——settings.py配置文件的学习

Python爬虫之Scrapy框架系列——创建并运行你的第一个Scrapy demo项目