240
我爱毛绒绒~~~~~~~

爬虫 - Scrapy框架安装使用1

网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人。大型的爬虫程序被广泛应用于搜索引擎、数据挖掘等领域,个人用户或企业也可以利用爬虫收集对自身有价值的数据。

简单流程如图所示:

  • 下载页面
    一个网页的内容本质上就是一个HTML文本,爬取一个网页内容之前,首先要根据网页的URL下载网页

  • 提取页面中的数据
    当一个网页(HTML)下载完成后,对页面中的内容进行分析,并提取出我们感兴趣的数据,提取到的数据可以以多种形式保存起来,比如将数据以某种格式(CSV、JSON)写入文件中,或存储到数据库(MySQL、MongoDB)中。

  • 提取页面中的链接
    通常,我们想要获取的数据并不只在一个页面中,而是分布在多个页面中,这些页面彼此联系,一个页面中可能包含一个或多个到其他页面的链接,提取完当前页面中的数据后,还要把页面中的某些链接也提取出来,然后对链接页面进行爬取(循环1-3步骤)

安装Scrapy框架

1. 安装wheel

pip install wheel

2. 安装lxml

pip install lxml

3. 安装pyopenssl

pip install pyopenssl

4. 下载并安装pywin32

pip install pywin32

5. 下载twisted的wheel文件
下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

6. 安装wheel文件

pip install D:\Twisted-20.3.0-cp37-cp37m-win32.whl

pip install Twisted --default-timeout=100000    ###直接下载

7. 安装scrapy

pip install scrapy

创建

1. 创建项目

scrapy startproject xiangmuming

scrapy startproject xiangmuming  [directory]   ###指定目录创建项目

2. 创建爬虫

scrapy genspider firstspider www.cnblogs.com

3. 运行爬虫

scrapy crawl baidu   #不带日志运行

scrapy crawl baidu --nolog   #带日志运行

4. 创建main.py文件运行爬虫

from scrapy.cmdline import execute
execute(['scrapy','crawl','chouti','--nolog'])

配置

settings配置

1、 是否遵循爬虫协议(否)

ROBOTSTXT_OBEY = False

2、 配置user_agent

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'

3、 配置日志等级

LOG_LEVEL='ERROR'

配置main.py运行爬虫

from scrapy.cmdline import execute
execute(['scrapy','crawl','chouti','--nolog'])

写爬虫

终端运行命令生成爬虫及爬虫文件

scrapy genspider firstspider www.cnblogs.com

1、 firstspider:爬虫名字,项目中唯一

2、 www.cnblogs.com:要爬取的网站

import scrapy


class FirstspiderSpider(scrapy.Spider):
    #每一个爬虫的唯一标识,一个项目中不能有同名
    name = "firstspider"
    #定义爬虫的起始点,这里只有一个
    allowed_domains = ["www.cnblogs.com"]
    start_urls = ["http://www.cnblogs.com/"]

    def parse(self, response):
        # 当一个页面下载完成后,Scrapy引擎会回调一个我们指定的页面解析函数(默认为parse方法)解析页面,完成如下:
        # 1.提取页面中的数据(使用XPath或CSS选择器)
        # 2.提取页面中的链接,并产生对链接页面的下载请求
        pass

    # 页面解析函数通常被实现成一个生成器函数,每一项从页面中提取的数据以及每一个对链接页面的下载请求都由yield语句提交给Scrapy引擎。

使用Item封装数据

  • Item基类:自定义数据类的基类

  • Field类:用来描述自定义数据类包含哪些字段(如name、price等)

  • 自定义一个数据类,只需继承Item,并创建一系列Field对象的类属性(类似于在Django中自定义Model)即可

  # items.py初始化文件如下
    import scrapy

    class ScrapyprojectItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        ### Item支持字典接口,因此BookItem在使用上和Python字典类似
        pass

使用Pipeline处理数据

  • 一个Item Pipeline不需要继承特定基类,只需要实现某些特定方法,例如process_item、open_spider、close_spider。

  • 一个Item Pipeline必须实现一个process_item(item, spider)方法

  # pipelines.py初始化文件如下

    class ScrapyprojectPipeline:
      ### Spider打开时(处理数据前)回调该方法,
      ###通常该方法用于在开始处理数据之前完成某些初始化工作,如连接数据库,打开文件等。
      def open_spider(self,spider):
        pass

      ###process_item在处理某项item时返回了一项数据(Item或字典),返回的数据会递送给下一级Item Pipeline(如果有)继续处理;
      ###如果在处理某项item时抛出(raise)一个DropItem异常(scrapy.exceptions.DropItem),该项item便会被抛弃,不再递送给后面的Item Pipeline继续处理,也不会导出到文件
      def process_item(self, item, spider):
        return item

      ###Spider关闭时(处理数据后)回调该方法,
      ###通常该方法用于在处理完所有数据之后完成某些清理工作,如关闭数据库。
      def close_spider(self,spider):
        pass
启用Item Pipeline

1、 ITEM_PIPELINES是一个字典,我们把想要启用的Item Pipeline添加到这个字典中,其中每一项的键是每一个Item Pipeline类的导入路径

2、 值是一个0~1000的数字,同时启用多个Item Pipeline时,Scrapy根据这些数值决定各Item Pipeline处理数据的先后次序,数值小的在前

    ITEM_PIPELINES = {
   "ScrapyProject.pipelines.firstPipeline": 300,
    }

使用命令行操作爬虫

在进行页面分析时,除了之前使用过的Chrome开发者工具外,另一个常用的工具是scrapy shell 命令,它使用户可以在交互式命令行下操作一个Scrapy爬虫,通常我们利用该工具进行前期爬取实验,从而提高开发效率

### 命令行操作命令:scrapy shell <URL>
scrapy shell books.toscrape.com

  • view函数
    1、 view在浏览器中显示爬虫爬取的下载页面,大部分情况下和浏览器直接访问相同,但是会比直接浏览器直接访问更加准确

  • fetch函数
    1、 fetch用于下载页面,请求新的URL,获得新的response和request

posted @   水开白  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示