爬虫 scrapy —基本使用及工作原理(十)

本文介绍了Scrapy,一个用于网站数据爬取的框架,涉及安装步骤、基本使用方法(创建项目、爬虫文件和运行代码)、项目结构、五八同城和汽车之家示例,以及Scrapy的工作原理和组成部分,如引擎、调度器、下载器、蜘蛛和中间件。
摘要由CSDN通过智能技术生成

scrapy是什么?

        scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。爬取更快,程序更加健壮。

目录

一、安装scrapy

二、scrapy的基本使用

1.创建scrapy项目

2.创建爬虫文件

3.运行爬虫代码

三、项目结构和基本方法——五八同城

1.创建爬虫项目

2.创建爬虫文件

3.运行爬虫文件

4.项目结构

5.response的属性和方法

四、scrapy工作原理——汽车之家

1.scrapy架构组成

2.scrapy工作原理

参考


一、安装scrapy

conda install scrapy

二、scrapy的基本使用

1.创建scrapy项目

终端输入 scrapy startproject 项目名称

eg:scrapy startproject scrapy_090

注意:不能包含中文,不能以数字命名,最好也不要以‘_’+数字的形式,程序会自动创建一个以项目名为前缀的class,数字开头会报错,但是我用‘_’+数字的形式命名,自动创建的类还是以数字开头,直接抹去了‘_’,这一点也规避一下吧。

2.创建爬虫文件

进入到spiders文件夹下,创建爬虫文件

创建爬虫文件:

        scrapy genspider 爬虫文件的名字 要爬取的网页地址

        eg:scrapy genspider baidu www.baidu.com

注意:这里的网页地址不需要加 'http://',因为自动创建的文件中会自动添加该协议。如下图所示。

3.运行爬虫代码

scrapy crawl 爬虫的名字

这里爬虫的名字就是你创建的爬虫文件名,也就是上图中的‘name’的值

但是运行上面代码后,并没有打印 print 中的内容。

输出的内容中有下面这样一句,这是一个反爬,robots协议。

我们去到这个文件下看一看

这里面显示了很多不可以爬取的地址

怎么解决呢?

打开spiders文件夹的同级文件 settings.py ,将 ‘ROBOTSTXT_OBEY = True’ 注释掉即可

然后重新运行爬虫文件,就可以成功打印了

三、项目结构和基本方法——五八同城

打开五八同城官网,并输入一个职位点击同城搜索,右键检测,找到页面的接口。

1.创建爬虫项目

scrapy startproject scrapy_091

2.创建爬虫文件

        scrapy genspider tongcheng58 https://sz.58.com/sou/?key=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91&classpolicy=uuid_
f566wFb2nsxz2wYPNP4mapnNbJcsCwQC%2Cclassify_B&search_uuid=f566wFb2nsxz2wYPNP4mapnNbJcsCwQC&search_type=input

但是可能会报不是内部或外部命令的错误,不用担心,文件已经创建好了。

然后我们打开创建好的文件

发现start_urls不全,不知道为啥呢?直接补全吧。

补全后是这样

然后注释掉 setting.py文件中的 ‘ROBOTSTXT_OBEY = True

3.运行爬虫文件

scrapy crawl tongcheng58

然后就输出了我们 print 中的内容 

4.项目结构

项目名称

        - 项目名称

                - spiders     (存储的是爬虫文件)

                        -__init__.py

                        - 自定义的爬虫文件    (最重要的核心功能文件

                - __init__.py

                - items.py    (定义数据结构的地方,即爬取的数据都包含哪些)

                - middlewares.py    (中间件, 即写代理机制的地方)

                - pipelines.py    (管道 , 即 用来处理下载的数据)

                - setting.py    (配置文件, robots协议、UA等在这里定义)

        - scrapy.cfg

5.response的属性和方法

content = response.text  获取的是相应的字符串

content = response.body  返回的是二进制数据

content = response.xpath('Xpath语法')  可以直接使用Xpath解析response中的内容

response.xpath('Xpath语法').extract()  获取selector对象的data属性值

or

content.extract()

content.extract_first()  提取selector列表的第一个数据

or

content.get()

完整代码:tongcheng58.py

import scrapy


class Tongcheng58Spider(scrapy.Spider):
    name = 'tongcheng58'
    allowed_domains = ['sz.58.com']
    start_urls = ['https://sz.58.com/quanzhizhaopin/?key=%E5%89%8D%E7%AB%AF&classpolicy=strategy%2Cuuid_846182c8bc514b0580c27bfd5390c824%2Cdisplocalid_4%2Cfrom_674%2Cto_jump%2Ctradeline_job%2Cclassify_B&search_uuid=846182c8bc514b0580c27bfd5390c824&final=1']
    def parse(self, response):
        # 字符串
        # content = response.text
        # 二进制数据
        # content = response.body
        # 解析数据
        content = response.xpath('//*[@type="button"]/@value')
        # content = content.extract()
        content = content.extract_first()
        print('===================================')
        print(content)
        print('===================================')

四、scrapy工作原理——汽车之家

获取汽车之家的某个品牌车的名字、图片及报价

找到网页接口

然后

1.创建爬虫项目 scrapy startproject scrapy_093

2.创建爬虫文件 scrapy genspider carhome http://...

获取品牌车的名字、图片及报价

import scrapy


class CarhomeSpider(scrapy.Spider):
    name = 'carhome'
    allowed_domains = ['car.autohome.com.cn']
    start_urls = ['https://car.autohome.com.cn/price/brand-33-628.html']

    def parse(self, response):
        print('=======================')
        # content = response.text
        name = response.xpath('//div[@class="main-title"]/a/text()')
        price = response.xpath('//span[@class="lever-price red"]/span/text()')
        print(name.extract())
        print(price.extract())
        print('=======================')

1.scrapy架构组成

(1)引擎(Engine):引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。

(2)调度器(Scheduler):调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。

(3)下载器(Downloader):下载器负责获取页面数据并提供给引擎,而后提供给spider。

(4)Spiders:Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。 更多内容请看 Spiders 。

(5)Item Pipeline:Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。 更多内容查看 Item Pipeline 。

        Item Pipeline的经典应用:

                ①清理HTML数据

                ②验证爬取的数据(检查item包含某些字段)

                ③查重(并丢弃)

                ④将爬取结果保存到数据库中

(6)下载器中间件(Downloader middlewares):下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response(也包括引擎传递给下载器的Request)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。处理下载请求部分

(7)Spider中间件(Spider middlewares):Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看 Spider中间件(Middleware) 。处理解析部分。

2.scrapy工作原理

Scrapy中的数据流由执行引擎控制,其过程如下:

1.引擎打开一个网站(open a domain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。
2.引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。
3.引擎向调度器请求下一个要爬取的URL。
4.调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。
5.一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
6.引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理(解析)。
7.Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
8.引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。(可下载则给Iitem,不可下载则给Scheduler继续解析,即第9步)
9.(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Billie使劲学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值