本文经过一个简单的项目实现Scrapy采集流程。但愿经过该项目对Scrapy的使用方法和框架可以有帮助。数据库
重点流程以下:服务器
安装好Scrapy框架,MongoDB的和PyMongo库。框架
(1)建立一个Scrapy项目,文件项目能够直接用dom
scrapy
scrapy
命令生成,命令以下所示:ide
scrapy startproject教程复制代码
(2)爬虫是本身定义的类,Scrapy经过该类从网页里采集内容分析数据的结果。不过这个类必须继承Scrapy提供的蜘蛛类网站
scrapy.Spider
url
,还要定义爬虫的名称和起始请求,以及怎样处理爬取后的数据。命令行
也能够使用命令行建立一个蜘蛛好比要生成行情这个蜘蛛,能够执行以下命令:代理
scrapy genspider 复制代码
进入刚才建立的教程文件夹,执行而后
genspider
命令。第一个参数是爬虫的名称,第二个参数是网站域名。执行完毕以后,蜘蛛文件夹中多了一个quotes.py,它就是刚刚建立的蜘蛛,内容以下所示:
import scrapy class QuotesSpider (scrapy.Spider): name = “quotes” allowed_domains = [ “quotes.toscrape.com” ] start_urls = [ 'http://quotes.toscrape.com/' ] def parse (self,response): 经过复制代码
(3)采集过程当中,目标网站会限制爬虫的请求访问频率,必须使用爬虫代理
在项目中新建middlewares.py文件(./项目名/middlewares.py)
#! -*- encoding:utf-8 -*- import base64 import sys import random PY3 = sys.version_info[0] >= 3 def base64ify(bytes_or_str): if PY3 and isinstance(bytes_or_str, str): input_bytes = bytes_or_str.encode('utf8') else: input_bytes = bytes_or_str output_bytes = base64.urlsafe_b64encode(input_bytes) if PY3: return output_bytes.decode('ascii') else: return output_bytes class ProxyMiddleware(object): def process_request(self, request, spider): # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort) # 添加验证头 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass # 设置IP切换头(根据需求) tunnel = random.randint(1,10000) request.headers['Proxy-Tunnel'] = str(tunnel)
修改项目配置文件 (./项目名/settings.py)
DOWNLOADER_MIDDLEWARES = { '项目名.middlewares.ProxyMiddleware': 100, }