Scrapy使用入门及爬虫代理配置

本文通过一个简单的项目实现Scrapy采集流程。希望通过该项目对Scrapy的使用方法和框架能够有帮助。

1. 工作流程

重点流程如下:

  • 创建一个Scrapy项目。
  • 创建一个爬虫来抓取网站和处理数据。
  • 通过命令行将采集的内容进行分析。
  • 将分析的数据保存到MongoDB数据库。

2. 准备环境

安装好Scrapy框架,MongoDB的和PyMongo库。

3. 爬虫项目实现

(1)创建一个Scrapy项目,文件项目可以直接用

scrapy

命令生成,命令如下所示:

scrapy startproject教程复制代码

(2)爬虫是自己定义的类,Scrapy通过该类从网页里采集内容分析数据的结果。不过这个类必须继承Scrapy提供的蜘蛛类

scrapy.Spider

,还要定义爬虫的名称和起始请求,以及怎样处理爬取后的数据。

也可以使用命令行创建一个蜘蛛比如要生成行情这个蜘蛛,可以执行如下命令:

scrapy genspider 复制代码

进入刚才创建的教程文件夹,执行然后

genspider

命令。第一个参数是爬虫的名称,第二个参数是网站域名。执行完毕之后,蜘蛛文件夹中多了一个quotes.py,它就是刚刚创建的蜘蛛,内容如下所示

1import scrapy 2class QuotesSpider (scrapy.Spider): 3 name = “quotes” 4 allowed_domains = [ “quotes.toscrape.com” ] 5 start_urls = [ 'http://quotes.toscrape.com/' ] 6 def parse (self,response): 7 通过复制代码

(3)采集过程中,目标网站会限制爬虫的请求访问频率,必须使用爬虫代理

在项目中新建middlewares.py文件(./项目名/middlewares.py)

1#! -*- encoding:utf-8 -*- 2 import base64 3 import sys 4 import random 5 PY3 = sys.version_info[0] >= 3 6 def base64ify(bytes_or_str): 7 if PY3 and isinstance(bytes_or_str, str): 8 input_bytes = bytes_or_str.encode('utf8') 9 else: 10 input_bytes = bytes_or_str 11 output_bytes = base64.urlsafe_b64encode(input_bytes) 12 if PY3: 13 return output_bytes.decode('ascii') 14 else: 15 return output_bytes 16 class ProxyMiddleware(object): 17 def process_request(self, request, spider): 18 # 代理服务器(产品官网 www.16yun.cn) 19 proxyHost = "t.16yun.cn" 20 proxyPort = "31111" 21 # 代理验证信息 22 proxyUser = "username" 23 proxyPass = "password" 24 request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort) 25 # 添加验证头 26 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) 27 request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass 28 # 设置IP切换头(根据需求) 29 tunnel = random.randint(1,10000) 30 request.headers['Proxy-Tunnel'] = str(tunnel)

修改项目配置文件 (./项目名/settings.py)

1DOWNLOADER_MIDDLEWARES = { 2 '项目名.middlewares.ProxyMiddleware': 100, 3 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

使用Scrapy网络爬虫框架小试牛刀

前言这次咱们来玩一个在Python中很牛叉的爬虫框架——Scrapy。scrapy介绍标准介绍Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的

Python爬虫教程

本篇是介绍在Anaconda环境下,创建Scrapy爬虫框架项目的步骤,且介绍比较详细Python爬虫教程31创建Scrapy爬虫框架项目首先说一下,本篇是在Anaconda环境下,所以如果没有安装Anaconda请先到官网下载安装Anaconda

Crawlscrapy分布式爬虫

1.概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取2.原生的scrapy是不可以实现分布式式爬虫  a)调度器无法共享  b)管道无法共享3.scrapyredis组件:专门为scrapy开发的一套组件,该组件可以让scrapy实现分布式  a)pipinstallscrapyredis4.分布式爬取的流程:

Scrapy使用入门及爬虫代理配置 - HelloWorld