scrapy进阶(豆瓣新书速递)(比亚迪)

scrapy数据建模与请求

学习目标:

  1. 应用 在scrapy项目中进行建模
  2. 应用 构造Request对象,并发送请求
  3. 应用 利用meta参数在不同的解析函数中传递数据
  4. scrapy构造post请求

1. 数据建模

通常在做项目的过程中,在items.py中进行数据建模

1.1 为什么建模

  1. 定义item即提前规划好哪些字段需要抓,防止手误,因为定义好之后,在运行过程中,系统会自动检查
  2. 配合注释一起可以清晰的知道要抓取哪些字段,没有定义的字段不能抓取,在目标字段少的时候可以使用字典代替

1.2 如何建模

在items.py文件中定义要提取的字段:

# Define here the models for your scraped items
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy
class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()    # 名字
    content = scrapy.Field()  # 内容
    link = scrapy.Field()  # 链接
    txt = scrapy.Field()  #详情介绍

1.3 如何使用模板类

模板类定义以后需要在爬虫中导入并且实例化,之后的使用方法和使用字典相同

爬虫文件.py

# -*- coding:utf-8 -*-
import scrapy
from douban.items import DoubanItem
....

    def parse(self, response):
        name = response.xpath('//h2[@class="clearfix"]/a/text()').extract()
        content = response.xpath('//p[@class="subject-abstract color-gray"]/text()').extract()
        link = response.xpath('//h2[@class="clearfix"]/a/@href').extract()
        for names, contents, links in zip(name, content, link):
            item = DoubanItem()  # 实例化后拿到模板类就可直接使用 本质是一个字典
            item['name'] = names
            item['content'] = contents.strip()
            item['link'] = links

注意:
1. from douban.items import DoubanItem这一行代码中 注意item的正确导入路径,忽略pycharm标记的错误
2. python中的导入路径要诀:从哪里开始运行,就从哪里开始导入

1.4 开发流程总结

1. 创建项目
   scrapy startproject 项目名
2. 明确目标
   在items.py文件中进行建模  (一般来说在开发流程里建模是必须的,但如果字段特别少也可以选择忽略)
3. 创建爬虫
   3.1 创建爬虫
       scrapy genspider 爬虫名 允许的域
   3.2 完成爬虫
       修改start_urls
       检查修改allowed_domains
       在parse方法里编写解析方法
4. 保存数据
   在pipelines.py文件中定义对数据处理的管道
   在settings.py文件中注册启用管道

2. 翻页请求的思路

  1. 找到下一页的url地址
  2. 把url地址构造成请求对象,传递给引擎

3. 构造Request对象,并发送请求

3.1 实现方法

  1. 确定url地址
  2. 构造请求,scrapy.Request(url,callback)
    • callback:指定响应体解析的函数名称,表示该请求返回的响应使用哪一个函数进行解析(callback不赋值的话默认是给parse方法解析)
  3. 把请求交给引擎:yield scrapy.Request(url,callback)

3.2 豆瓣新书速递爬虫

通过爬取豆瓣新书速递的页面信息,学习如何实现翻页请求

地址:豆瓣新书速递

思路分析:
  1. 获取首页的响应数据(因为里面有我们想要的翻页链接)
  2. 寻找下一页的地址,进行翻页,获取数据
注意:
  1. 可以在settings中设置ROBOTS协议

    False表示忽略网站的robots.txt协议,默认为True

    ROBOTSTXT_OBEY = False

  2. 可以在settings中设置User-Ag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值