scrapy的深入使用

目标

  1. 认识scrapy的debug信息
  2. 知道scrapy shell如何使用
  3. 认识setting中的配置一起配置的使用

1 认识scrapy的debug信息

每次程序启动后,默认情况下,终端都会出现很多的debug信息,那么下面我们来简单认识下这些信息

2 scrapy shell的使用

scrapy shell是scrapy提供的一个终端工具,能够通过它查看scrapy中对象的属性和方法,以及测试xpath

使用方法:scrapy shell http://www.itcast.cn/channel/teacher.shtml

在终端输入上述命令后,能够进入python的交互式终端

小知识点:

  • response.url:当前响应的url地址
  • response.request.url:当前响应对应的请求的url地址
  • response.headers:响应头
  • response.body:响应体,也就是html代码,默认是byte类型
  • response.requests.headers:当前响应的请求头

3 认识scrapy中的setting文件

  • 为什么项目中需要配置文件

    • 在配置文件中存放一些公共变量,在后续的项目中便便修改,注意其中的变量名一般全部大写
  • 配置文件中的变量使用方法

    • 导入即可使用
  • settings.py中的重点字段和内涵

    • USER_AGENT 设置ua
    • ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守
    • CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
    • DOWNLOAD_DELAY 下载延迟,默认无延迟
    • COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
    • DEFAULT_REQUEST_HEADERS 设置默认请求头
    • SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
    • DOWNLOADER_MIDDLEWARES 下载中间件

4 管道中的open_spiderclose_spider 的方法

在管道中,除了必须定义process_item之外,还可以定义两个方法:

  • open_spider(spider) :能够在爬虫开启的时候执行一次
  • close_spider(spider) :能够在爬虫关闭的时候执行一次

所以,上述方法经常用于爬虫和数据库的交互,在爬虫开启的时候建立和数据库的连接,在爬虫关闭的时候断开和数据库的连接

下面的代码分别以操作文件和mongodb为例展示方法的使用:

5 动手

需求:爬取苏宁易购所有下所有图书和图书分类信息,以及子链接页面的价格内容。

url : https://book.suning.com/

思路分析:

  • 确定数据抓取的入口 数据包含一个大分类,每个大分类包含多个中间分类,每个中间分类包含多个小分类

    注意其中中间分类的位置并不在大分类中,小分类的位置也不在中间分类中

    大分类的位置如下:

    中间分类和小分类的位置如下:

  • 确定url和程序终止的条件 列表页首页的地址就是小分类的地址,通过请求这些地址,能够进入列表页的首页

    但是翻页的url地址不在响应中,而且每个页面的数据是由两个请求获取的

    通过抓包,能够知道URL地址的规律,pagenum每次+1

    那么如果确定什么时候程序终止呢?

    通过观察url地址对应的响应,能够知道总的页码数和当前页码数,当前页码数<总的页码数时,能够构造出下一页的请求

    翻页的两个url地址为:

     next_url_temp_1 = "https://list.suning.com/emall/showProductList.do?ci={}&pg=03&cp={}&il=0&iy=0&adNumber=0&n=1&ch=4&sesab=ABBAAA&id=IDENTIFYING&cc=010"
    
     next_url_temp_2 = "https://list.suning.com/emall/showProductList.do?ci={}&pg=03&cp={}&il=0&iy=0&adNumber=0&n=1&ch=4&sesab=ABBAAA&id=IDENTIFYING&cc=010&paging=1&sub=0"
    

    其中ci的值和cp的值在变化,ci为url地址中的参数,cp为页码数

  • 确定列表页数据的位置

    列表页的数据都在li标签下,数据都在url地址对应的响应中

    但是注意第一页的数据是由小分类的url地址和另一个ajax请求共同获取的,ajax中的数据位置

  • 价格数据的位置 价格不再url地址对应的响应中,而在:https://pas.suning.com/nspcsale_0_000000000167229140_000000000167229140_0070121210_10_010_0100101_226503_1000000_9017_10106____R9011184_1.1.html?callback=pcData&_=1526313493577

    这个url地址中的前三个参数在url地址中,后两个参数在详情页url地址的响应中,对应的临时的url地址为:https://pas.suning.com/nspcsale_0_000000000{}_000000000{}_{}_10_010_0100101_226503_1000000_9017_10106____{}_{}.html?callback=pcData&_=1526011028849

### 使用Scrapy工具进行网页爬取的方法 #### 环境搭建 在使用Scrapy之前,需要先安装Scrapy库以及配置开发环境。可以通过pip命令完成Scrapy的安装: ```bash pip install scrapy ``` 确保环境中已正确安装Python及其依赖项[^1]。 #### 创建项目 创建一个新的Scrapy项目可通过以下命令实现: ```bash scrapy startproject project_name ``` 这将在当前目录下生成一个名为`project_name`的新文件夹,其中包含了Scrapy项目的结构化文件[^2]。 #### 定义目标URL与Spider 定义爬虫的目标站点和名称是关键一步。例如,要针对某个特定域名创建爬虫,可运行如下命令: ```bash scrapy genspider spider_name domain.com ``` 上述命令中的`spider_name`代表自定义的爬虫名称,而`domain.com`则是目标网站地址。 #### 数据提取逻辑 在Scrapy中,数据提取主要依靠XPath或CSS选择器完成。可以在Spiders模块下的`.py`文件里编写解析函数,用于定位页面上的所需元素。例如: ```python import scrapy class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['http://example.com/'] def parse(self, response): title = response.css('title::text').get() yield {'title': title} ``` 此代码片段展示了如何利用CSS选择器获取HTML文档中的<title>标签内容[^3]。 #### 调试与测试 对于初步编写的爬虫脚本,建议采用交互式的Shell模式来进行调试验证其有效性: ```bash scrapy shell url_address ``` 这里替换实际网址作为参数传入即可进入交互界面观察返回结果[^4]。 #### 存储抓取成果 默认情况下,Scrapy支持多种输出格式如JSON、CSV等保存所采集的信息。只需附加相应的导出选项至终端指令后面便可轻松达成目的: ```bash scrapy crawl example -o items.json ``` #### 性能调优及其他高级特性 随着需求的增长,还可以深入研究更多关于提升效率的技术手段——诸如异步请求处理机制调整并发数量限制;或者集成第三方插件解决动态加载难题等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值