• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Scrapy框架的基本使用

武飞扬头像
ASDDAG
帮助2

Scrapy框架的基本使用

1.Scrapy安装和介绍

通用方式:可以从pip安装Scrapy及其依赖:

pip install Scrapy

scrapy组件学新通

    • 引擎(Scrapy)
      用来处理整个系统的数据流处理, 触发事务(框架核心)
    • 调度器(Scheduler)
      用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    • 下载器(Downloader)
      用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
    • 爬虫(Spiders)
      爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
    • 项目管道(Pipeline)
      负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

2.创建项目

scrapy startproject tutorial

项目结构:

tutorial/
    scrapy.cfg            # 部署配置文件

    tutorial/             # Python模块,代码写在这个目录下
        __init__.py

        items.py          # 项目项定义文件

        pipelines.py      # 项目管道文件

        settings.py       # 项目设置文件

        spiders/          # 我们的爬虫/蜘蛛 目录
            __init__.py

3.创建爬虫

创建爬虫spider文件。

scrapy genspider 爬虫名称 允许爬取的域

scrapy genspider test_spider example.com

spider文件夹中出现baizhan_spider.py文件

class BaizhanCourseSpider(scrapy.Spider):
    name = 'baizhan_course'
    allowed_domains = ['itbaizhan.com']
    start_urls = ['http://itbaizhan.com/']

所要爬取的目标网址

def start_requests(self):
	start_urls = 'https://www.itbaizhan.com/index/stage/navlist?id=4&stage=0'
    yield scrapy.Request(start_urls)

对网站的结构进行解析(具体因网站结构为主)

设置修改settings.py配置文件相关配置

#修改内容及其结果如下:
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份

ROBOTSTXT_OBEY = False  #可以忽略或者不遵守robots协议

ITEM_PIPELINES = {
   'baizhan.pipelines.BaizhanPipeline': 300,
}   # 开启piipelines,设置优先级300,数值越小优先级越高

DOWNLOAD_DELAY = 3  # 修改下载速度

数据持久化,将爬到的数据保存至数据库

items.py:数据结构模板文件。定义数据属性。
    pipelines.py:管道文件。接收数据(items),进行持久化操作。

持久化流程:
    1.爬虫文件爬取到数据后,需要将数据封装到items对象中。
    2.使用yield关键字将items对象提交给pipelines管道进行持久化操作。
    3.settings.py配置文件中开启管道

**items文件:**items.py

import scrapy


class SecondbloodItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()
    author = scrapy.Field() # 存储作者
    content = scrapy.Field() # 存储段子内容

管道文件:pipelines.py

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting


class SecondbloodPipeline(object):
    #构造方法
    def __init__(self):
        self.fp = None  #定义一个文件描述符属性
  #下列都是在重写父类的方法:
    #开始爬虫时,执行一次
    def open_spider(self,spider):
        print('爬虫开始')
        self.fp = open('./data.txt', 'w')

   #因为该方法会被执行调用多次,所以文件的开启和关闭操作写在了另外两个只会各自执行一次的方法中。
    def process_item(self, item, spider):
        #将爬虫程序提交的item进行持久化存储
        self.fp.write(item['author']   ':'   item['content']   '\n')
        return item 

    #结束爬虫时,执行一次
    def close_spider(self,spider):
        self.fp.close()
        print('爬虫结束')
学新通

4.执行爬虫

执行爬虫程序:

# 执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储
    scrapy crawl test -o test.json
    scrapy crawl test -o test.xml
    scrapy crawl test -o test.csv

和settings.py同级目录下创建start.py文件

from scrapy.cmdline import execute
execute('scrapy crawl test'.split())

ml
scrapy crawl test -o test.csv


和settings.py同级目录下创建start.py文件

```python
from scrapy.cmdline import execute
execute('scrapy crawl test'.split())

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfihkfb
系列文章
更多 icon
同类精品
更多 icon
继续加载