1、Scrapy介绍
1.1什么是Scrapy
scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,只需要实现少量的代码就能够快速的抓取,scrapy使用了Twisted异步网络框架,可以加快下载速度
1.2Scrapy工作流程
名称 | 作用 |
---|---|
Scrapy Engine(引擎) | 总指挥:负责数据和信号在不同模块之间的传递 |
scheduler(调度器) | 一个队列,存放引擎发过来的requests请求 |
Downloader(下载器) | 下载引擎发过来的requests请求 |
spider(爬虫) | 处理引擎发过来的response,提取数据,提取url,交给引擎 |
item pipeline(管道) | 处理引擎传过来的数据,比如存储 |
downloader middlewares(下载中间件) | 可以自定义的下载扩展,比如设置代理 |
spider middlewares(爬虫中间件) | 可以自定义requests请求和进行response过滤 |
2、Scrapy入门
首先要通过换源导入scrapy模块pip install scrapy -i https:pypui.douban.com/simple
第一步:创建一个scrapy项目,通过cmd或者terminal来创建scrapy startproject 项目名称
生成之后就会出现一些写好的模块,就是通过模块来操作scrapy的
第二步:生成一个爬虫scrapy genspider 爬虫名称 +爬取范围
,创建完爬虫之后,就会在spider下生成你生成的爬虫模块,数据的操作就是在这个模块中进行
第三步:提取数据
通过原有模板,打印response类型找到其中支持的方法,发现支持xpath以及css等结构化数据
import scrapy
from scrapy.http.response.html import HtmlResponse
from scrapy.selector.unified import SelectorList
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['douban.com']
start_urls = ['http://douban.com/']
def parse(self, response):
# print('='*100)
# print(type(response),response)<class 'scrapy.http.response.html.HtmlResponse'>
# print('='*100)
result = response.xpath('//div[@class="side-links nav-anon"]/ul/li')
# print(type(result),result)<class 'scrapy.selector.unified.SelectorList'>
# print('='*100)
item = {}
for li in result:
item['name'] = li.xpath('a/em/text()').extract_first()
if item['name'] == None:
item['name'] = li.xpath('a/text()').extract_first()
# print(item)
# return item
yield item
通过xpath提取数据发现得到是<class 'scrapy.selector.unified.SelectorList'>
类,通过导入模块发现它继承了列表中的get()方法,此时我们不需要无关数据所以要用到extract_first()得到想要的数,别再setting模块中设置显示等级必须大写LOG_LEVEL = 'WARNING’或者LOG_LEVEL = ‘ERRO’
第四步:保存数据
通过管道pipeline来实现打开pipelines模块,它提示了不要忘记设置setting,如图操作打开setting中的通道即可使用
pipelines返回了一个item这是在spider中我们创建爬虫时候返回的数据,直接打印的话只有一行数据,内部封装的方法优化中表明只能用生成器返回即yield,并且只能在循环里面返回如图,返回完成之后,运行就可以执行pipelines里面对数据的具体要求方法了