1 scrapy框架初识
- 什么是框架?
所谓的框架简单通用解释就是就是一个具有很强通用性并且集成了很多功能的项目模板,该模板可被应用在不同的项目需求中。也可被视为是一个项目的半成品。 - 如何学习框架?
对于刚接触编程或者初级程序员来讲,对于一个新的框架,只需要掌握该框架的作用及其各个功能的使用和应用即可,对于框架的底层实现和原理,在逐步进阶的过程中在慢慢深入即可。 - 什么是scrapy?
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。其内部已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可
2 scrapy基本使用
- 环境安装:
在这里简单说下我的安装方法 我是直接在pycharm中安装scrapy 和twisted 安装成功后需要设置环境变量 将你的Scripts所在的路径放在系统环境变量中 否则无法在pycharm中创建项目
如果在终端中输入scrapy 出现如图所示说明安装成功!
3 scrapy使用流程:
- 创建工程:只能在终端中命令行创建
scrapy startproject ProName ProName是你自己创建项目的名称 - 进入工程目录:
cd ProName - 创建爬虫文件:
scrapy genspider spiderName www.xxx.com - 编写相关操作代码
- 执行工程:
scrapy crawl spiderName
4 简单小小小案例
- 爬虫文件
import scrapy
class SpidernameSpider(scrapy.Spider):
#文件名唯一标识
name = 'spiderName'i
#域名 一般不用
#allowed_domains = ['www.xxx.com']
#目标网站
start_urls = ['https://www.baidu.com/']
#响应数据 response 访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url 发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NU
def parse(self, response):
print(response)
- 配置文件settings.py修改:
修改内容及其结果如下:
#19行:
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份
#22行:
ROBOTSTXT_OBEY = False #可以忽略或者不遵守robots协议
#标识只显示错误日志信息
LOG_LEVEL = 'ERROR'
案例一 爬取古诗文网 标题 内容
1 创建好工程 目录入如图所示:
2 开始编写爬虫文件 Gsw.py
import scrapy
from gswPro.items import GswproItem
class GswSpider(scrapy.Spider):
name = 'Gsw'
#allowed_domains = ['www.baidu.com']
#目标网站
start_urls = ['https://www.gushiwen.cn/default_1.aspx']
def myprint(self,value):
print(value)
def parse(self, response):
div_list = response.xpath('/html/body/div[2]/div[1]/div[@class="sons"]')
# print(response.text)
#self.myprint(div_list)
for gsw in div_list:
title = gsw.xpath('./div[1]/p[1]/a/b/text()').get()
title = str(title)
# title = gsw.xpath('./div[1]/p[1]/a/b/text()').extract_first()
#self.myprint(title)
content = gsw.xpath('./div[1]/div[2]//text()').extract() #.getall()
content = ''.join(content)
# self.myprint(content)
# 创建item 对象 进行存储爬取数据
item = GswproItem()
item['title'] = title
item['content'] = content
yield item
3 数据存储
编辑items.py 进行数据封装
import scrapy
class GswproItem(scrapy.Item):
title = scrapy.Field() #标题
content = scrapy.Field() #内容
封装后将数据交给管道 pipelines.py
from itemadapter import ItemAdapter
class GswproPipeline:
fp =None
def open_spider(self,spider):
print('开始爬取数据')
self.fp = open('./古诗文.txt','w',encoding='utf-8')
def process_item(self, item, spider):
title = item['title']
content = item['content']
self.fp.write(title+':'+content)
return item
def close_spider(self,spider):
self.fp.close()
print('数据爬取完成!')
注意 配置文件settings.py需要进行修改:
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'
ITEM_PIPELINES = {
'gswPro.pipelines.GswproPipeline': 300,
}
#这个注释要去掉
最后执行工程就可以了: