目录
一、Scrapy框架安装
二、创建Scrapy项目
三、创建爬虫文件
四、运行spider文件
五、各个组件功能
1、spider目录下的文件
2、settIngs.py配置文件
3、持久化存储步骤
一、Scrapy框架安装
pip install Scrapy
或
conda install Scrapy
二、创建Scrapy项目
scrapy startproject 项目名
三、创建爬虫文件
进入项目路径:
scrapy genspider 爬虫文件名 爬虫文件的url
创建后会在spider目录下生成,介绍如下:
import scrapy
class ItcastSpider(scrapy.Spider):
name = 'itcast' # 爬虫名,爬虫文件的唯一标志
allowed_domains = ['itcast.cn'] # 允许爬取的范围
# 最开始请求的url地址,可以为多个,默认会自动发起get请求
start_urls = ['http://www.itcast.cn/channel/teacher.shtml']
def parse(self, response):
# response即为响应回的数据
# 用于请求后的数据解析
# 处理start_url地址对应的响应
ret1 = response.xpath("//div[@class='tea_con']//h3/text()")
print(ret1)
四、运行spider文件
到项目路径下:
scrapy crawl 爬虫文件名(不要后缀)
五、各个组件功能
1、spider目录下的文件
负责数据解析
parse里数据解析时,使用的xpath和etree.xpath有所不同的是返回的对象是selector对象,需要使用extract()方法来获取每条数据。
获取返回的selector对象的数据相应的方法:
方法 | 描述 | .extract() | 解析selector对象后返回数组 | .extract_first() | 和extract()方法类似但返回的是第一条数据 | | |
2、settIngs.py配置文件
常用的属性
属性 | 描述 | LOG_LEVEL | 一般为WARNING或ERROR,在该层级以上时才会打印日志,默认打印所有日志。 | USER_AGENT | UA伪装。 | ROBOTSTXT_OBEY | robots协议,一般使用都要禁止,False。 | ITEM_PIPELINES | 开启后便开启了管道类的使用,里面的数字代表优先级,数字越小优先级越高。 | | | | | | |
3、持久化存储步骤
(1)items.py里定义与parse解析好返回相同数量的变量容器
如:
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class Scrapypro01Item(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# Field()定义的变量当做万能类型的变量
title = scrapy.Field()
content = scrapy.Field()
(2)持久化存储前的准备,爬虫解析文件里的parse()方法需返回对应的Item对象
如:
import scrapy
from scrapyPro01.items import Scrapypro01Item
class ItcastSpider(scrapy.Spider):
name = 'itcast'
allowed_domains = ['itcast.cn']
start_urls = ['http://www.itcast.cn/channel/teacher.shtml']
def parse(self, response):
title = "title"
content = "content"
# 创建items.py里对应的对象,记得先导包
item = Scrapypro01Item()
item["title"] = title
item["content"] = content
# 将item对象提交给管道
yield item
(3)利用管道类持久化存储
使用管道类之前需要先开启配置类里的管道类配置,见settings.py的使用
如:
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
class Scrapypro01Pipeline:
def open_spider(self, spider):
self.fp = open("test.txt", "w", encoding="utf-8")
# 该方法只会在爬虫开始时执行一次
def close_spider(self, spider):
# 该方法只会在爬虫结束时执行一次
self.fp.close()
def process_item(self, item, spider):
# 该方法用来接收item对象,一次只能接收一个,可以接收多次
# 参数item就是接收的item对象
# 写入文件
self.fp.write(item["title"] + ":" + item["content"] + "\n")
return item
|