SCRAPY_学习笔记(一)

本文详细介绍Scrapy爬虫框架的安装、配置及核心组件使用方法,包括项目创建、目录结构解析、数据提取与处理流程,以及如何通过pipelines进行数据持久化。

SCRAPY使用

第一篇笔记是一份scrapy中的格式的简单整理。大部分都是伪代码,用来快速回忆每个部分的作用。具体代码会在第二篇里编写。自学可能有些错误,欢迎补充。

内容列表

scrapy安装

pip install scrapy

cmd命令

项目创建

scrapy startproject hellospider   

项目启动

scrapy crawl hellospider -o items.json
  • -o items.json为输出items到一个json文件。可删除。

目录结构

mulu
hellospider/items.py:需要提取的数据结构定义文件。
hellospider/middlewares.py: 是和Scrapy的请求/响应处理相关联的框架。
hellospider/pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。
hellospider/settings.py: 项目的配置文件。
hellospider/spiders/: 放置spider代码的目录。

代码编辑

1. item.py中定义爬取数据

item可以看成是个字典,我们在这里声明键(KEY),之后在spider里面用item[键]传入

class DetailItem(scrapy.Item):
    title = scrapy.Field() #item里一个键为title的栏位
    ......
2. spiders目录下添加myspider.py文件

在MySpider这个物件中,有以下常用变量:

  1. name: scrapy唯一定位实例的属性,必须唯一
  2. allowed_domains:允许爬取的域名列表,不设置表示允许爬取所有
  3. start_urls:起始爬取列表
  4. header: HTTP Request的Header信息。如果直接和后端通信的话,大部分情况要构建’User-Agent’ , ‘Referer’ , ‘token’ 来骗过后端以为爬虫是前端。常用于爬angluar之类的API。

我们常常重写或编写这些方法:

  1. start_requests:它就是从start_urls中读取链接,然后使用make_requests_from_url生成Request。我们可以重写它,加入header之类的东西。
  2. parse:主回调函数,处理response并返回处理后的数据和需要跟进的url
  3. 其他parse:这是我们自己写的其他的parse,与parse()作用一样。比如我们想从宫吧爬出每一个贴子里的图文,那么我们用parse()去宫吧主页面拉出所有帖子的超链接,之后用scrapy.Request()的方法跳进每一个帖子里,再parsepost()处理帖子所有的图片。

这里我们常用的工具:

  1. XPATH查找路径
  2. RE正则表达
import scrapy
from hellospider.items import DetailItem
class MySpider(scrapy.Spider):
    name = "spider名"
    allowed_domains = ["在这个域名下爬"]
    start_urls = ["初始爬的网页"]
    # 循环读取首页列表,分别跳转详情页
    def parse(self, response):
        for line in response.xpath('...'):
            hh = line.xpath('a/@href').extract()
            yield scrapy.Request(url=hh , callback=self.parsePost, dont_filter=False)
    # 进入详情页,爬资料
    def parsePost(self, response):
        item = DetailItem()
        item['title'] = line.xpath('...').extract()
        yield item
3. pipelines.py的编写

当Item在Spider中被收集之后,它将会被传递到Item Pipeline。我们可以选择是否对item进行处理。常用的处理包括:

  1. 保存item为txt之类的文件
  2. 根据item的参数(url),去下载文件
  3. 把item存进SQL里
  4. 查重,清洗,筛选数据等

scrapy官方有 存为json保存图片保存文件 等pipline可直接使用。要是觉得他们不好用,我们可以继承这些方法,并改写他们。

例如我在这里重写爬图pipline,增加分类文件夹的功能:

class SharkImagePipeline(ImagesPipeline):
    # 下载图片时遍历此item的zimg
    def get_media_requests(self, item, info):
        for image_url in item['zimg']:
            # 这里把item传过去,因为file_path需要用item里面文件名
            yield Request(image_url, meta={'item': item})
    # 修改文件的命名和路径
    def file_path(self, request, response=None, info=None):
        item = request.meta['item']
        folder_name = item['fisherno'][0]
        image_guid = request.url.split('/')[-1]
        file_name = './{}/{}'.format(folder_name, image_guid)
        # print("图片叫啥:", file_name) 
        return file_name
4. setting.py里修改参数

这里可以声明一些参数:

  • 要使用的pipline
  • 根据item里的哪一项爬文件
  • 爬文件保存的位置
  • 是否使用中间件
ITEM_PIPELINES = {
    #主要的pipline,后面数字是优先级
    'hellospider.pipelines.hellospiderPipeline': 300, 
    #爬文件专用的pipline
    'scrapy.pipelines.files.FilesPipeline': 1,}
FILES_STORE = 'Download' #文件保存位置
IMAGES_URLS_FIELD = 'zimg'  # pipline根据item[zimg]抓文件

(END) © Kiyoshimo

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值