博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

scrapy之框架的简介和基础使用

Posted on 2019-03-21 15:47  TigerAt  阅读(192)  评论(0)    收藏  举报

【scrapy简介】

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。

【安装】

1)Linux/mac:

pip3 install scrapy

 2)Windows:

a. pip3 install wheel

b. 下载twisted(http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted)

 

c. 进入下载目录,执行 pip3 install 下载好的框架.whl

d. pip3 install pywin32

e. pip3 install scrapy

安装完成后输入:scrapy

如果打印如下信息,则表示安装成功

【基础使用】

1.创建一个项目

scrapy startproject 项目名称

以创建一个qiushibaike的项目为例

scrapy.cfg   项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py     设置数据存储模板,用于结构化数据,如:Django的Model
pipelines    数据持久化处理
settings.py  配置文件,如:递归的层数、并发数,延迟下载等
spiders      爬虫目录,如:创建文件,编写爬虫解析规则

2.在项目目录下创建一个爬虫文件

1)cd 项目目录

2)scrapy genspider 应用名称 爬取网页的起始url 

以爬取(’糗事百科’-‘文字’)https://www.qiushibaike.com/text/ 为例,抓取对应段子的内容和作者

并且在spiders目录下生成了一个名为“qiushi_text.py”的一个爬虫文件

我们先来看一下新生成文件中都包含哪些内容(我已将对应代码做了相关注释)

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 
 4 
 5 class QiushiTextSpider(scrapy.Spider):
 6     #爬虫文件名称:通过爬虫文件的名称可以指定定位到某一个具体的爬虫文件
 7     name = 'qiushi_text'
 8     '''允许的域名:只可以爬取指定域名下的页面数据,由于我们爬取的链接内容在爬取过程中可能跳转至
 9     不是此域名下的url,因此在没有特殊要求的情况下,这条命令可以注释掉'''
10     #allowed_domains = ['https://www.qiushibaike.com/text/']
11     #起始url:当前项目将要爬取的页面所对应的url,注文件中初始的url头部为http,将其替换或者删除就可以
12     start_urls = ['https://www.qiushibaike.com/text//']
13 
14     '''解析方法:对获取的页面数据进行指定内容的解析
15        response:根据起始url列表发起请求,请求成功后返回的响应对象  
16        注:
17        1.parse方法的返回值:必须为迭代器(常见字典/列表等)或者空  
18        2.建议大家使用xpath进行指定内容的解析:框架集成了xpath的接口
19     '''
20     def parse(self, response):
21         pass

3.对应的文件中编写爬虫程序来完成爬虫的相关操作(即在parse方法中编写爬虫代码)

    def parse(self, response):
        content_list = response.xpath('//div[@id="content-left"]/div')
        for content in content_list:
            '''1.xpath解析到的指定内容被存储到了Selector对象
               2.extract()方法可以将Selector对象中存储的数据拿到
               3.extract_first()等价于extract()[0]'''
            author = content.xpath('./div/a[2]/h2/text()').extract_first()
            content_detail = content.xpath('.//div[@class="content"]/span/text()').extract()[0]
            print(author + ":" + content_detail +"\n\n\n")

4.配置文件(settings.py)的编写

修改内容及其结果如下:
#19行 默认为注释状态:#USER_AGENT = 'qiushibaike (+http://www.yourdomain.com)' chrome获取user-agent的方式:在地址栏中输入:about:version即可
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' 
#22行
可以忽略或者不遵守robots协议,默认为True
ROBOTSTXT_OBEY = False 

5.执行

scrapy crawl  应用名称

scrapy crawl qiushi_text

ps:

 scrapy crawl 爬虫名称 :该种执行形式会显示执行的日志信息
 scrapy crawl 爬虫名称 --nolog:该种执行形式不会显示执行的日志信息

 

注:本内容仅用于学习交流,请勿它用,本内容部分参考http://xiaobaibook.com/details/56/,有兴趣的同学可转至具体链接页面进行学习查阅