Scrapy是爬虫框架。
它分为一下部分,其中引擎是核心
通过pip install scrapy在终端上下载这个爬虫框架。
注意:框架不能像包一样直接导入,需要生成框架结构,在这个结构上操作
启动框架:
首先在终端上进入到要生成项目的路径.
然后输入scrapy startproject 项目名
启动框架
此时项目路径下会有一个框架生成的文件夹
先进入爬虫spiders文件夹中,输入scrapy genspider 爬虫文件名称 爬取网页的链接
命令生成爬虫文件。这里以豆瓣读书为例
最后使用scrapy crawl +爬虫名(book)来启动爬虫,因为在终端不方便数据查询,所以一般会使用其他方式启动。
这里创建新文件运行这个命令
运行结果scrapy日志信息是红色输出,网页源码以白色输出。
scrapy爬取基本流程如下:
设置爬虫基础参数
这里不遵守这个协议,否则爬取不到什么信息了。改成False
默认爬取的线程数,可以取消注释,并修改数目,默认16个线程。
设定保存优先级,数字越大,优先级越小。用于多种保存方式下,哪一种保存方式优先。
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
# 封装数据
class TestscrapyItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
rating_nums = scrapy.Field()
import scrapy
import re
from ..items import TestscrapyItem
class BookSpider(scrapy.Spider):
name = 'book' # 通过这个名字启动爬虫
allowed_domains = ['book.douban.com']
start_urls = ['https://book.douban.com/top250?start=0']
def parse(self, response):
# response是爬虫返回的网页数据
# print(response.text)
# 封装对象
items = TestscrapyItem()
title = re.findall(', response.text)
rating_nums = re.findall(' ', response.text)
# print(rating_nums)
# 封装数据给pipelines
for title, rating_nums in zip(title, rating_nums):
items['title'] = title
items['rating_nums'] = rating_nums
yield items #给pipelines
# 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 TestscrapyPipeline:
def __init__(self):
self.file = open('data.txt', 'w', encoding='utf-8')
def process_item(self, item, spider):
self.file.write(f"{item['title']} 评分:{item['rating_nums']}\n==========\n")
return item # 通知爬虫,这个数据已经保存成功了
# 析构函数
def __del__(self):
self.file.close()
print('文件保存成功')
import os
os.system('scrapy crawl book')
运行结果