request vs Scrapy
相同点:两者都可以进行页面请求和爬取,python爬虫的两个重要技术路线;两者可用性都好,文档丰富,入门简单;两者都没有处理js、提交表单、应对验证码等功能(可扩展)
不同点:requests:页面级爬虫;功能库;并发性考虑不足,性能较差;重点在于页面下载;定制灵活;上手十分简单。scrapy:网站级爬虫;框架;并发
简单介绍
python一个强大的爬虫框架(5+2结构)
spinder: 解析Downloader返回的响应(response);产生爬取项(scraped item);产生额外的爬去请求(Request)
item Pipelines 以流水线方式处理Spider产生的爬取项;由一组操作顺序组成,类似流水线,每个操作是一个item Pipeline
yield关键字的使用:含yied关键字的为上生成器(生成器是一个不断产生值的函数)(包含yield语句的函数是一个生成器)(生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值)
Request类:产生请求
.url:requests对应的请求的url地址;
.method:对应请求的方法'get','post';
.headers:字典类型风格的请求头
.body:请求内容主体,字符串类型;
.meta:用户添加的扩展信息,在scrapy内部模块间传递信息使用
.copy()复制该请求
Response类:返回一个响应
.url:response对应的url地址;
.staus:;http状态码,默认是200;
.headers:response对应的头部信息
.body:response对应的内容信息,字符串类型;
.flags:一组标记;
.request:产生response类型对应的request对象
.copy()复制该响应
item类:item对象表示一个从html页面中提取的信息内容;
由spider生成,由item pipeline处理 ;item类似字典类型,可以按照字典类型操作
安装
pip install scrapy
scrapy命令介绍
scrapy list 查看当前项目内有多少爬虫
scrapy view http://www.baidu.com view使用浏览器打开网页
scrapy startproject <project_name> 这个命令是scrapy最为常用的命令之一,它将会在当前目录下创建一个名为 <project_name>的项目。
scrapy runspider <spider_file.py> 在未创建项目的情况下,运行一个编写在Python文件中的spider。
scrapy fetch <url> 使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出。简单的来说,就是打印url的html代码。
scrapy version [-v] 输出Scrapy版本。配合 -v 运行时,该命令同时输出Python, Twisted以及平台的信息。
scrapy crawl <spider_name> 使用你项目中的spider进行爬取,即启动你的项目。这个命令将会经常用到,我们会在后面的内容中经常使用。
scrapy genspider [-t template] <name> <domain>在当前项目中创建spider。该方法可以使用提前定义好的模板来生成spider。您也可以自己创建spider的源码文件。scrapy genspider py名字 baidu.com
scrapy settings [options] 获得爬虫配置信息
scrapy shell [url] 启动URL调试命令行
使用步骤
步骤:在命令行中输入
一、建立一个Scrapy爬虫工程
scrapy startproject python123demo
二、在工程中产生一个Scrapy爬虫
cd python123demo
scrapy genspider demo python123demo.io
三、配置产生的spider爬虫,编写项目中spiders目录下创建的文件,该项目中是demo.py
四、使用scrapy crawl demo执行该跨框架
基于以上例子,关于目录结构的介绍
└─python123demo #外层目录
│ demo.html #
│ scrapy.cfg #部署Scrapy爬虫的配置文件
│
└─python123demo #Scrapy框架的用户自定义python代码
│ items.py #Items代码模板(继承类)
│ middlewares.py #Middlewares代码模板(继承类)
│ pipelines.py #Pipelines代码模板(继承类)
│ settings.py #Scrapy爬虫的配置文件
│ __init__.py #初始化脚本
│
├─spiders #Spiders代码模板目录(继承类)
│ │ demo.py #爬虫文件,需要用户自己编写
│ │ __init__.py #初始化文件,无需修改
│ │
│ └─__pycache__ #缓存目录,无需修改
│ demo.cpython-36.pyc
│ __init__.cpython-36.pyc
│
└─__pycache__
settings.cpython-36.pyc
__init__.cpython-36.pyc
html页面的提取方法css selector的基本使用
<html>.css('a::attr(href)').extract()