【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/,有兴趣的同学可转至具体链接页面进行学习查阅



浙公网安备 33010602011771号