一.什么是Scrapy?
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。
所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)
的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。
二.安装
Linux:
pip3 install scrapy
Windows:
a. pip3 install wheel
b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl(更具情况选择具体版本)
- 注意:必须保证安装成功。安装失败,可以换另一个版本的twisted文件再次进行安装
d. pip3 install pywin32
e. pip3 install scrapy
- 检测环境是否安装成功:
- 终端中:scrapy
![安装成功显示如下图:]
三.基本使用 - 创建一个项目
- scrapy startproject proName
-项目目录下的两个文件表示的含义:- spiders包:爬虫文件夹
- 必须在爬虫文件夹中创建一个爬虫源文件
- settings.py:配置文件
- spiders包:爬虫文件夹
- scrapy startproject proName
- cd proName
- 创建一个爬虫文件(爬虫文件要创建在spiders包中)
- scrapy genspider spiderName www.xxx.com
- 爬虫文件可以使用上述指令创建多个
一个爬虫项目的目录如下所示:
- 编写爬虫文件
- 执行项目
- scrapy crawl spiderName
- 终端中:scrapy
四.爬虫文件的编写
- 定义好了一个类,该类的父类是Spider,Spider是scrapy所有类的父类
- 类中定义好了三个属性和一个方法
- duan.py
# -*- coding: utf-8 -*-
import scrapy
from duanzi.items import DuanziItem
class DuanziSpider(scrapy.Spider):
name = 'duanzi'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://ishuo.cn/xiaozhishi']
- name:爬虫文件的名称
- start_urls:起始url列表
- 作用:可以对列表中的url进行get请求的发送
- allow_demains:允许的域名,注释掉即可。
- parse(self,response):
- 将起始url列表中的url请求成功后,response就是获取的响应对象,
在该方法中负责实现数据解析
- scrapy工程默认是遵从rotbos协议的,需要在配置文件中进行操作:
- 不遵从robots协议
- 指定日志等级
- LOG_LEVEL = 'ERROR'
五.数据解析
duan.py
# 数据解析操作
def parse(self, response):
# 数据解析,段子标题:内容
li_list = response.xpath('//*[@id="list"]/ul/li')
for li in li_list:
# 不是字符串,而是selector对象,提取的字符串数据被存储在该对象中
# content = li.xpath('./div[1]/text()')[0]
# 返回的是selector中存储的字符串数据
content = li.xpath('./div[1]/text()')[0].extract()
# extract_first()将列表中第0个元素进行数据提取
# content = li.xpath('./div[1]/text()').extract_first()
title = li.xpath('./div[2]/a/text()')[0].extract()
# extract()将列表中每一个列表元素表示的selector对象中的字符串取出
tag = li.xpath('./div[2]/span//text()').extract() # 返回的是列表,列表中有多个元素
tag = ''.join(tag) # 将列表转为字符串
print('内容:',content)
print('标题:',title)
print('标签:',tag)