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

Stella981
• 阅读 528

本文通过一个简单的项目实现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,它就是刚刚创建的蜘蛛,内容如下所示

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,
    }
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Karen110 Karen110
2年前
使用Scrapy网络爬虫框架小试牛刀
前言这次咱们来玩一个在Python中很牛叉的爬虫框架——Scrapy。scrapy介绍标准介绍Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的
Stella981 Stella981
2年前
Python爬虫教程
本篇是介绍在Anaconda环境下,创建Scrapy爬虫框架项目的步骤,且介绍比较详细Python爬虫教程31创建Scrapy爬虫框架项目首先说一下,本篇是在Anaconda环境下,所以如果没有安装Anaconda请先到官网下载安装Anaconda
Stella981 Stella981
2年前
Crawlscrapy分布式爬虫
1.概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取2.原生的scrapy是不可以实现分布式式爬虫  a)调度器无法共享  b)管道无法共享3.scrapyredis组件:专门为scrapy开发的一套组件,该组件可以让scrapy实现分布式  a)pipinstallscrapyredis4.分布式爬取的流程:
Stella981 Stella981
2年前
Scrapyd发布爬虫的工具
ScrapydScrapyd是部署和运行Scrapy.spider的应用程序。它使您能够使用JSONAPI部署(上传)您的项目并控制其spider。ScrapydclientScrapydclient是一个专门用来发布scrapy爬虫的工具,安装该程序之后会自动在python目录\\scripts安装一个名为scrapyd
Stella981 Stella981
2年前
Scrapy框架
\TOC\1\.Scrapy介绍1.1.Scrapy框架Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。!(http://ccszt.com.cn/python/%E7%88%AC%E8%99%AB/file/images/
Stella981 Stella981
2年前
Scrapy笔记(1)
Scrapy笔记01入门篇  Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓取)所设计的,也可以应用在获取API所返回的数据(比如WebServices)或者通用的网络爬虫。  Scr
Stella981 Stella981
2年前
Scrapy爬虫框架
(1)、简介在糗事百科爬虫中我们的爬虫是继承scrapy.Spider类的,这也是基本的scrapy框架爬虫,在这个爬虫中我们自己在解析完整个页面后再获取下一页的url,然后重新发送了一个请求,而使用CrawlsSpider类可以帮助我们对url提出条件,只要满足这个条件,都进行爬取,CrawlSpider类继承自Spider,它比之前的Spid
Stella981 Stella981
2年前
Scrapy框架之分布式操作
一、分布式爬虫介绍  分布式爬虫概念:多台机器上执行同一个爬虫程序,实现网站数据的分布爬取。1、原生的Scrapy无法实现分布式爬虫的原因?调度器无法在多台机器间共享:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start\_urls列表中的url。管