参考文档:Scrapy入门教程 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.htmlhtml
scrapy基本使用(二) http://www.cnblogs.com/zhaijiahui/p/6984640.htmlpython
python3.5 按照官网大写的安不上,要是小写的才能安上网络
pip install scrapy
理论上若是报错,再看几遍就行了,至少我是这样,多是网络问题吧。框架
若是出现了这个报错,是twisted的安装问题。dom
building 'twisted.test.raiser' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
解决方案:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载twisted对应版本的whl文件(如个人Twisted‑17.5.0‑cp36‑cp36m‑win_amd64.whl),cp后面是python版本,amd64表明64位,运行命令:scrapy
pip install C:\Users\CR\Downloads\Twisted-17.5.0-cp36-cp36m-win_amd64.whl
其中install后面为下载的whl文件的完整路径名
安装完成后,再次运行:ide
pip install Scrapy
便可成功。函数
1) 建立项目ui
这是第一步,由于咱们要使用人家搭好的框架,这步就是生成框架。编码
scrapy startproject tutorial
执行成功会在当前目录生成一个文件夹。
2) 文件夹里的内容
官网说的很详细了,这里引用官网,我根据本身浅薄的知识理解一下。
scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。以后您将在此加入代码。(这才是核心呀。。)
tutorial/items.py: 项目中的item文件.(这是建立容器的地方,爬取的信息分别放到不一样容器里)
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.(我用到的设置一下基础参数,好比加个文件头,设置一个编码)
tutorial/spiders/: 放置spider代码的目录. (放爬虫的地方)
3) 定义容器(items.py)
我我的认为,容器不用一开始就定好,应该是一点一点加的,可是官网就这个顺序。。
修改items.py
import scrapy class DmozItem(scrapy.Item): #建立一个类,继承item类,就是继承人家写好的容器嘛 title = scrapy.Field() # 取哪些内容,就建立哪些容器 link = scrapy.Field() desc = scrapy.Field()
例子:
import scrapy class DmozSpider(scrapy.Spider): # 继承Spider类 name = "dmoz" # 爬虫的惟一标识,不能重复,启动爬虫的时候要用 allowed_domains = ["dmoz.org"] # 限定域名,限定范围,应该是这个意思 start_urls = [ # 连接列表,能够有多个 "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): filename = response.url.split("/")[-2] # 获取url,用”/”分段,获去倒数第二个字段 with open(filename, 'wb') as f: f.write(response.body) # 把访问的获得的网页源码写入文件
这里须要重点说一下parse方法
被调用时,每一个初始URL完成下载后生成的 Response 对象将会做为惟一的参数传递给该函数。
该方法负责解析返回的数据(response data),提取数据(生成item)以及生成须要进一步处理的URL的 Request 对象。
简单说就是用来编写爬虫的主体,response就是网页源码。
一条命令:
scrapy crawl dmoz
执行爬虫的时候发生了什么?
Scrapy为Spider的 start_urls 属性中的每一个URL建立了 scrapy.Request 对象,并将 parse 方法做为回调函数(callback)赋值给了Request。
例:
yield scrapy.Request(self.url + nextLink, callback=self.parse)
Request对象通过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。
这里咱们了解到请求连接的改变是靠回调函数实现的。