一、Scrapy框架
- Spiders负责两件事(1)发送url到引擎(2)接收响应回来的数据
- Scheduler(调度器)从引擎获得url,对url进行排序,安排谁先谁后怎么去爬取
- Downloader(下载器)去Internet下载数据,把数据交给引擎
- Item Pipeline(数据管道)进行数据的存储
二、创建项目
- win+R找到自己项目的目录
- 创建项目的语法:scrapy startproject douban
- 结果如下
三、项目编写
1,items.py编写,定义属性
import scrapy
class DoubanItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#以上两行注释交给我们怎么定义属性,跟着写就可以
title=scrapy.Field()
publish=scrapy.Field()
score=scrapy.Field()
# 由于我们要爬取书名,书的信息以及书的得分所以我们定义这三个属性
2,Spiders编写
Spiders编写在spiders中创建一个新的.py文件进行爬虫的编写
import scrapy
from lxml import etree
from ..items import DoubanItem #从items中导入DoubanItem这个类
class DoubanSpider(scrapy.Spider):
name = 'douban'#定义爬虫的名字,主要是用于启动爬虫程序
allowed_domains=['book.douban.com/top250']#定义爬虫爬取的范围,可以写入多个
start_urls=['https://book.douban.com/top250']#定义爬取的网址,也可写入多个
def parse(self, response):#用于获取相应的结果
tree = etree.HTML(response.text)
tags = tree.xpath('//div[@class="article"]//tr[@class="item"]')
for tag in tags:
item=DoubanItem()
title=tag.xpath('.//div[@class="pl2"]/a/@title')
title=''.join(title)
publish=tag.xpath('.//p[1]/text()')
publish=''.join(publish)
score=tag.xpath('.//div[@class="star clearfix"]/span[2]/text()')
score=''.join(score)
item['title']=title
item['publish']=publish
item['score']=score
yield item #负责将数据提交给引擎
3,settings.py进行修改
-
之前我们写爬虫程序需要进行UA伪装,在Scrapy框架中,也是要进行设置的,在settings.py文件进行设置,找到如下的代码,将headers添加进去
-
将协议设置为False
-
管道打开
4,pipelines.py进行数据存储
import openpyxl
class DoubanPipeline:
def __init__(self):
self.wb=openpyxl.Workbook()
self.ws=self.wb.active
self.ws.append(['书名','出版','评分'])#表头设置
def process_item(self, item, spider):
line=[item['title'],item['publish'],item['score']]
self.ws.append(line)
return item
def close_spider(self,spider):
self.wb.save('doubanbooks.xlsx')
self.wb.close()
5,启动程序
创建一个新的.py文件,注:一定要和scrapy.cfg在同一级目录下
from scrapy import cmdline
cmdline.execute(['scrapy','crawl','douban'])#douban就是我们定义的爬虫程序的名字
结果展示