安装
-windows中:
需要安装的库:wheel--lxml--twisted--pywin32--scrapy
注意:
1.twisted 需要通过文件路径来安装 pip install path(安装包下载地址:http://www.lfd.uci.deu/~gohlke/pythonlibs/#twisted 找到合适自己操作系统及python的版本)
2.其他的库都可以通过pip install xxx安装
各个组件介绍
-engine 爬虫引擎
负责控制各个组件之间的数据流,当某些操作触发事件后都通过engine来处理
-scheduler 调度器
用来接受来自engine的请求,并将请求放入队列中,并通过事件返回给engine
-downloader
通过engine请求下载网络数据并将结果响应给engine
-spider
spider发出请求,并处理engine返回给它下载器响应数据,以items和规则内的数据请求url返回给engine items以新的请求集
创建Scrapy 项目
1.scrapy startproject project_name #创建一个爬虫项目
2.cd project_name #进入项目目录
3.srapy genspider 爬虫名 爬虫域名 #建立爬虫
scrapy startproject myspider
scrapy genspider baiduspider www.baidu.com
注意:
一个完整的爬虫需要4步
-新建目标 scrapy startproject
-明确目标 编写items.py #定制要抓取的字段
-制作爬虫 spiders
-存储内容 pipelines.py
spider项目结构
-spiders文件夹
-spiders目录,负责存放继承scrapy的爬虫类
-items.py 负责数据模型的建立,类似于实体类
-middlewares.py 自定义的中间件
-pipelines.py 负责对spider返回数据的处理
-settings.py负责对整个爬虫的配置
-scrapy.cfg 项目的配置文件
scrapy的命令行命令
1.全局命令(表示可以在任何地方使用)
startproject #创建爬虫项目
genspider #用于生成爬虫一共有四种模板
basic(默认) crawl csvfeed xmlfeed
-具体的用法
scrapy genspider 爬虫名 爬去的网站域名
-可以指定模板
scrapy genspider -t 模板名
settings #scrapy settings -h 可以获取这个命令的所有帮助信息
runspider #scrapy runspider爬虫文件名称(这里的爬虫文件都是在项目目录下的spiders文件夹中)
shell #scrapy shell url地址 进入交互模式
fetch #scrapy fetch url地址 该命令会将网页document内容下载,并在浏览器显示
-参数
--nolog 不打印日志
--headers打印响应头信息
--no-rediret 不做跳转
view #scrapy view url地址
该命令会通过scrapy 将网页的源代码下载下来并显示(因为现在很多网站的数据都是通过ajax请求来加载的,这个时候直接通过requests请求无法获取我们想要的数据,这个时候view命令可以帮助我们很好的判断)
version #scrapy version -v 查看版本信息
2.项目命令(只能在项目目录下使用)
crawl #启动spider爬虫 scrapy crawl 爬虫名
check #用于检查代码是否有错误 scrapy check
list #列出所有可用的爬虫 scrapy list
edit
parse
bench
scrapy框架中选择器(提取数据的机制)
–xpath是专门在xml文件中选择节点的语言,也可以用在HTML上
–css是一门将HTML文档样式化,选择器有由它定义,并与特定的HTML元素的样式相关连
1.xpath选择器
nodeName 选择节点的所有节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,不考虑它们的位置
. 选择当前节点
.. 选择当前节点的父节点
@ 选择属性
* 匹配任何元素的节点
@* 匹配任何属性节点
Node() 匹配任何类型的节点
2.css选择器
extract_first() #获取标签的文本内容,直接返回第一个值
extract_first(default='xx') 可以设置默认参数,若匹配不到则返回 xx
extract() #获取标签的文本内容,返回一个列表
contains()
spiders用法
1.spider类
–定义如何爬取某个网站;包括了爬取的动作(是否跟进链接)以及如何从网页中提取结构化数据(爬取item)
2.工作流程分析
1.以初始的URL初始化Request,并设置回调函数,当该request下载完毕并返回时,将生成response,并作为参数传给回调函数。spider中初始的request是通过start_requests()来获取的。start_requests()获取start_urls的URL,并用parse回调函数生成Request
2.在回调函数内分析返回的网页内容,可以返回Item对象,或Dict,或者Request,以及是一个包含三者的可迭代的容易,返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数
3.在回调函数内,可以通过lxml,bs4,xpath,css等方法获取我们想要的内容生成item
4.最后将item传递给Pipeline处理
--注意:
创建一个Sipder,必须继承scrapy.Spider类,且定义三个属性:
name,start_urls, parse()
3.常用属性
-name
定义爬虫的名字(必须是唯一的),通过命令启动的时候就是这个名字
-start_urls
包含了Spider在启动时进行爬取得url列表。因此,第一个被获取到得页面将是其中之一。后续的url则从初始的URL获取到的数据中提取
-parse(response)
是spider的一个方法。被调用时,每个初始URL完成下载后生成Response对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的Request对象
-allowed_domains
包含spider允许爬取的域名列表。当offsiteMiddleware启用时,域名不在类别中URL不会被访问。因此在爬虫文件中,每次生成Request请求时都会济宁和这里的域名进行判断