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

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基础+爬虫案例)

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python爬虫Scrapy项目入门是一个非常好的学习资源,它可以帮助初学者快速入门Scrapy框架,掌握爬虫基本原理和技巧。在学习过程中,我们需要掌握Scrapy基本组成部分,如Spider、Item、Pipeline等,同时还需要了解如何使用XPath和CSS选择器来解析网页内容。此外,我们还需要学习如何使用Scrapy的中间件来处理请求和响应,以及如何使用Scrapy的调度器来管理爬虫任务。总之,Python爬虫Scrapy项目入门是一个非常实用的学习资源,可以帮助我们快速掌握Scrapy框架的基本知识和技能。 ### 回答2: Python爬虫是一种程序,可以自动化地从互联网上抓取数据,并将其保存到本地或者数据库中。它主要是用于处理一些大量数据的项目,例如搜索引擎、在线商店等等。 Scrapy是一个Python爬虫框架,提供了强大的数据提取和处理工具。Scrapy是用Python编写的,因此可以利用Python编程语言提供的强大功能,从而轻松地编写和维护大规模的网络爬虫项目。 下面是Python爬虫Scrapy项目入门的基本步骤: 1. 安装Scrapy 在安装Scrapy之前,需要先安装Python,然后使用以下命令安装Scrapy: pip install scrapy 2. 创建一个新的Scrapy项目 使用以下命令创建一个新的Scrapy项目: scrapy startproject project_name 3. 编写爬虫程序 进入新创建的项目目录,使用以下命令创建一个新的spider(爬虫): scrapy genspider spider_name website_name 然后针对所爬取的页面编写爬虫程序。该程序需要指定爬取的起始URL,以及如何爬取和处理数据。 4. 运行爬虫程序 使用以下命令运行爬虫程序: scrapy crawl spider_name 可以在命令行中查看程序输出信息以及收集到的数据。 5. 存储数据 通过编写pipeline来将所爬取的数据存储到本地文件或数据库中。pipeline也可以用于对数据进行清洗、去重等处理。 6. 优化项目 可以通过调整Scrapy的配置来优化项目。例如设置User-Agent、延迟请求等,防止被目标网站识别出是爬虫,并被封禁。 通过以上步骤,可以轻松地入门Python爬虫Scrapy项目,并编写自己的爬虫程序,收集所需的数据Scrapy提供了很多丰富的功能和工具,使得爬虫开发更加简单、高效。 ### 回答3: Scrapy是Python下用于数据挖掘和数据爬取的一个开源框架,其崇尚规范的设计和高效的性能,使得开发者可以更加快捷、高效、可靠地获取大量数据。 在使用Scrapy进行爬虫项目入门时,首先需要安装Scrapy和依赖的库。在安装好Scrapy后,我们可以通过命令行工具开始新建一个爬虫项目,在新建的项目中,我们可以构建爬虫的main流程,包括Scrapy框架的各个模块以及管道和中间件。 然后我们需要编写爬虫规则,制定爬虫的起始URL、要爬取的数据数据的处理方法等等。此外,如果需要登录、翻页等高级功能的话,我们还需要对爬虫规则进行扩展和调整。 编写好爬虫规则后,我们可以通过Scrapy提供的各种调试工具进行调试,在确定爬虫的工作正常后,我们可以通过配置Scrapy中间件和管道,将爬取到的数据进行清洗、处理和存储。 总体来说,Scrapy是一个强大的数据爬取工具,它简化了数据爬取过程中各种繁琐的操作,让开发者可以专注于爬取和处理数据本身。而对于初学者来说,要掌握Scrapy使用,需要多动手实践,积极与开发者社区互动和交流,逐步提高对Scrapy框架的理解和应用水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Billie使劲学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值