xml地图|网站地图|网站标签 [设为首页] [加入收藏]

scrapy爬知乎用户关系网以及下载头像

来源:http://www.ccidsi.com 作者:呼叫中心培训课程 人气:77 发布时间:2019-06-05
摘要:正文实例讲述了Python爬虫框架scrapy达成downloader_middleware设置proxy代理功用。分享给大家供我们参照他事他说加以考查,具体如下:   谈起Python,大家恐怕任天由命的想到其在爬虫方面包

正文实例讲述了Python爬虫框架scrapy达成downloader_middleware设置proxy代理功用。分享给大家供我们参照他事他说加以考查,具体如下:

 

谈起Python,大家恐怕任天由命的想到其在爬虫方面包车型客车重大贡献。Python的风靡在于其语言的姣好以及美好的气氛。相对于Java,js等语言来讲,Python API在封装方面要好过多。明日我们要说的是Python的三个通用的开源爬虫框架 scrapy。
scrapy在爬虫界可谓是鼎鼎大名。其内部写好的各样零部件使用起来可谓是顺风顺水。各组件的法力作者不在此1一列举了,下边教程中会简略提到。全体架构如下图所示:

一、背景:

一、背景:

澳门皇家线上娱乐,框架简要介绍:

引用自 http://blog.csdn.net/zbyufei/article/details/7554322 已经精晓scrapy能够直接略过,也足以当复习使用

一、绿线是数量流向,首先从起始 UHavalL 起头,Scheduler 会将其提交 Downloader 进行下载,下载之后会付出 Spider 举行辨析,Spider 解析出来的结果有三种:1种是内需更为抓取的链接,比如从前深入分析的“下一页”的链接,这一个事物会被流传 Scheduler ;另1种是索要保留的数额,它们则被送到 Item Pipeline 这里,那是对数据开始展览早先时期管理(详细剖判、过滤、存款和储蓄等)的地方。其余,在数量流动的通道里还足以设置种种中间件,举行供给的拍卖。
二、组件
1、Scrapy Engine(Scrapy引擎)
Scrapy引擎是用来支配总体类别的多寡处理流程,并进行事务处理的触及。越多的详尽内容可以看下边包车型地铁数量管理流程。
2、Scheduler(调度)
调整程序从Scrapy引擎接受请求并排种类入队列,并在Scrapy引擎发出请求后返还给他们。
3、Downloader(下载器)
下载器的首要任务是抓取网页并将网页内容返还给蜘蛛( Spiders)。
4、Spiders(蜘蛛)
蜘蛛是有Scrapy用户自身定义用来深入分析网页并抓取制定UPAJEROL再次来到的内容的类,每种蜘蛛都能管理2个域名或壹组域名。换句话说正是用来定义特定网址的抓取和解析规则。
蜘蛛的总体抓取流程(周期)是那样的:
第3获得第二个U凯雷德L的开始请求,当呼吁重临后调取三个回调函数。第三个请求是通过调用start_requests()方法。该格局暗中认可从start_urls中的Url中变化请求,并推行分析来调用回调函数。
在回调函数中,你能够剖析网页响应并重回项目对象和伸手对象或双边的迭代。那个请求也将包蕴1个回调,然后被Scrapy下载,然后有钦命的回调解和管理理。
在回调函数中,你深入分析网址的剧情,同程使用的是Xpath选取器(可是你也足以采用BeautifuSoup, lxml或任何任何你喜欢的次序),并转移深入分析的数码项。
终极,从蜘蛛重临的花色一般会进驻到花色管道。
5、Item Pipeline(项目管道)
品类管道的重中之重责任是承受管理有蜘蛛从网页中收取的等级次序,他的重要任务是清晰、验证和积存数据。当页面被蜘蛛剖判后,将被发送到项目管道,并经过多少个特定的主次管理数量。每种项目管道的组件都以有一个粗略的方法结合的Python类。他们获得了项目并实行他们的法子,相同的时间他们还需求鲜明的是是还是不是须要在品种管道中继续施行下一步或是直接废弃掉不处理。
类型管道常常施行的历程有:
清洗HTML数据
表达深入分析到的数码(检查项目是不是包罗须求的字段)
自己商议是或不是是重复数据(若是再度就删除)
将分析到的数目存储到数据库中
陆、Downloader middlewares(下载器中间件)
下载中间件是献身Scrapy引擎和下载器之间的钩框架,主假使拍卖Scrapy引擎与下载器之间的伸手及响应。它提供了3个自定义的代码的点子来举办Scrapy的职能。下载中间器是贰个拍卖请求和响应的钩框架。他是轻量级的,对Scrapy尽情享用全局调整的平底的种类。
7、Spider middlewares(蜘蛛中间件)
蜘蛛中间件是在于Scrapy引擎和蜘蛛之间的钩子框架,重要办事是拍卖蜘蛛的响应输入和请求输出。它提供2个自定义代码的法门来展开Scrapy的功效。蛛中间件是多个挂接到Scrapy的蜘蛛管理体制的框架,你能够插入自定义的代码来拍卖发送给蜘蛛的央浼和再次来到蜘蛛获取的响应内容和档期的顺序。
八、Scheduler middlewares(调整中间件)
调节中间件是在乎Scrapy引擎和调节之间的中间件,紧要职业是处从Scrapy引擎发送到调治的伸手和响应。他提供了二个自定义的代码来进行Scrapy的法力。


叁、数据管理流程
Scrapy的总体数据管理流程有Scrapy引擎举行调整,其首要性的运行情势为:
内燃机张开一个域名,时蜘蛛管理那么些域名,并让蜘蛛获取第二个爬取的URAV4L。
发动机从蜘蛛那获取第三个须要爬取的U猎豹CS陆L,然后作为请求在调整中开始展览调治。
内燃机从调解那获取接下去实行爬取的页面。
调解将下3个爬取的UWranglerL再次来到给引擎,引擎将他们通过下载中间件发送到下载器。
当网页被下载器下载完结现在,响应内容通过下载中间件被发送到引擎。
内燃机收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛举办拍卖。
蜘蛛管理响应并赶回爬取到的花色,然后给引擎发送新的请求。
外燃机将抓取到的品类项目管道,并向调治发送请求。
系统再次第1部前面包车型客车操作,直到调解中没有请求,然后断开引擎与域之间的关联。

作者在爬虫的时候自然会遇见被封闭扼杀的景观,前日爬了八个网址,刚开始是足以了,在settings的装置DEFAULT_REQUEST_HEADELacrosseS伪装自个儿是chrome浏览器,刚早先是足以的,紧接着就被对方服务器封杀了。

  小编在爬虫的时候肯定会遇见被封闭扼杀的情景,昨日爬了三个网站,刚起头是足以了,在settings的设置DEFAULT_REQUEST_HEADETucsonS伪装本身是chrome浏览器,刚开端是足以的,紧接着就被对方服务器封闭扼杀了。

仿照登录

臭名昭著的引用完旁人的介绍之后,大家来讲说怎样去爬乐乎。
自家的笔触:通过当前用户的主页得到其用户数据,如下图:

检索其关心的用户和客官列表,以其关切者为例:

下一场依次取其关心者恐怕客官的数码,最终将爬到的数额开始展览管理,存入数据库(笔者那边运用mongodb,mongodb相关知识就不细说了)

设若你品味过去爬微博的话,当你爬到起观者列表你会意识无论是你怎么努力,最终爬到的也只可是是微博的记名页面:

因为今日头条是在线用户才具访问其他用户的关心列表和观众列表,所以依附此,我们无法不伪装在线用户技能获得数量。
率先我们得清楚在线用户在造访新浪的时候向其发送了怎么着数据。大家在chrome里展开调节和测试器,然后点击network选项卡:

当今大致是从未怎么数据的,此时刷新一下当下页面

就那样我们见到下载的源码正是曾经报到用户的源码了。

代理:

代理:

代码测试

上面大家要找到发送的参数点击下面的headers选项卡,往下拉倒RequestHeaders,那正是大家要访问天涯论坛所须要的数码:

此地最首要说一下多少个参数:

  • User-Agent: 用户代理,首要给服务器提供近来浏览器的参数,分歧的用户代理用户得到的数据大概会不一样样。服务器也可以依赖是不是留存此字段来防爬,也得以通过robots.txt来屏蔽掉有些爬虫。
  • cookie: 服务器重回的标记用户信息的部分键值对。大许多网址也是依照此表明用户身份的
  • Referer:HTTP参照位址,用以代表从哪连接到方今的网页。通过那么些字段能够做些图片防盗链管理,那也常被用来应付伪造的跨网址请求。

笔者们将数据粘贴到接口测试工具里(这里我利用的paw)结果如下:

看,大家早已得到了结果

既是已经获得了大家想要的数码,那么其观者列表自然也就不在话下:

现行大家得以测试下用代码获取数据啦
先选取paw给出的demo来测试下:

代码如上航海用教室所示(这里的代码我就不付出了,没什么东西)

能够证实,大家获得的数量是对的
自然,那些列表最长唯有二十二个,笔者会在此后的课程里给出怎样猎取具备的关心者和观者(这里有一点点小坑)

代理,代理,一直认为爬去网页把爬去速度放慢一点就会基本制止被封闭扼杀,即使能够利用selenium,不过那几个坎供给求过,scrapy的代办其实设置起来很轻巧。

  代理,代理,一向以为爬去网页把爬去速度放慢一点就能够基本制止被封闭扼杀,就算能够应用selenium,不过那些坎必须求过,scrapy的代办其实设置起来非常的粗略。

scrapy上场

好了,万事俱备,就差去爬东西了。
scrapy框架的切切实实选择办法官方有汉语文书档案,小编这里就一窍不通说了
此间直接伊始写代码:

注意,request.meta['proxy']=代理ip的API

  注意,request.meta['proxy']=代理ip的API

设置settings文件

settings文件是爬虫项目的布局文件,大家得以把cookie和header放在此地,用于调用
在此处本人做成了七个字典

在此地提供2个把一行的cookie分成字典的小工具

print u'请输入你要分割的 cookie,回车开始分割'
str = raw_input()
print  'nnnnnn'
arr = str.split(';')
for i in arr:
    i = '"'   i
    if not i.startswith('"'):
        i = '"'   i
    if not i.endswith('"'):
        i  = '"'
    i  = ','
    arrs = i.split('=', 1)
    if not arrs[0].endswith('"'):
        arrs[0]  = '"'
    if not arrs[1].startswith('"'):
        arrs[1] = '"'   arrs[1]
    print ':'.join(arrs)

接下去配置 AutoThrottle,用来安装爬虫的推移,幸免内服务器ban掉ip

AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 10

middlewares.py

middlewares.py

class HttpbinProxyMiddleware(object):

    def process_request(self, request, spider):
        pro_addr = requests.get('http://127.0.0.1:5000/get').text
        request.meta['proxy'] = 'http://'   pro_addr
        #request.meta['proxy'] = 'http://'   proxy_ip

创建spider文件

在spiders文件夹里创建一个名为ZhihuSpider.py 文件

代码如下 :

# -*- coding: utf-8 -*-
from zhihu_spider.settings import *
import scrapy
class ZhihuSpider(scrapy.Spider):
    # 爬虫的名字,启动爬虫时需要用
    name = 'zhihu'
    # 从哪开始爬
    start_urls = ['https://www.zhihu.com/people/chi-chu-63']
    # 只能爬数组内的域名
    allowed_domains = ['www.zhihu.com']

地点写好了以后,大家供给用上大家设置的老董KIE
此间大家重写下make_requests_from_url方法,把COOKIE传入:

def make_requests_from_url(self, url):
        return Request(url, method='GET',headers=ZHIHU_HEADER, cookies=ZHIHU_COOKIE)

接下去,在parse方法里通过response参数我们就能够透过xpath可能css selector里获得要求的参数了

# 拿到用户名
response.css('.title-section .name::text').extract_first()
class HttpbinProxyMiddleware(object):
  def process_request(self, request, spider):
    pro_addr = requests.get('http://127.0.0.1:5000/get').text
    request.meta['proxy'] = 'http://'   pro_addr
    #request.meta['proxy'] = 'http://'   proxy_ip

  设置运营下面大家写的这几个代理

配置 item

得到参数大家供给经过item包装起来,yield出去技术保险数据通过scrapy框架进入下二个流水生产线(管理item)
我们必要写2个类承袭 scrapy.Item,代码如下:

class ZhihuSpiderItem(scrapy.Item):
    user_name = scrapy.Field()  # 用户名
    followees = scrapy.Field()  # 用户粉丝
    followers = scrapy.Field()  # 用户关注的人
    introduce = scrapy.Field()  # 简介
    ellipsis = scrapy.Field()  # 用户详细介绍
    location = scrapy.Field()  # 住址
    major = scrapy.Field()  # 主修
    head_image = scrapy.Field()  # 头像url
    views = scrapy.Field()  # 浏览次数
    ask = scrapy.Field()  # 提问
    answer = scrapy.Field()  # 回答
    articles = scrapy.Field()  # 文章
    collected = scrapy.Field()  # 收藏
    public_editor = scrapy.Field()  # 公共编辑
    main_page = scrapy.Field()
    _id = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()

接下去,大家在 spider.py文件里将取到的参数放到item里:

  def parse(self, response):
        item = ZhihuSpiderItem()
        user_name = response.css('.title-section .name::text').extract_first()
        print user_name
        if user_name:
            item['user_name'] = user_name
        follow = response.css(
            'body > div.zg-wrap.zu-main.clearfix > div.zu-main-sidebar > div.zm-profile-side-following.zg-clear > a> strong::text').extract()

        if follow:
            if follow[0]:
                item['followees'] = int(follow[0])
            if follow[1]:
                item['followers'] = int(follow[1])

        item['introduce'] = ''.join(response.css(
            'div.zg-wrap.zu-main.clearfix > div.zu-main-content > div > div.zm-profile-header.ProfileCard > div.zm-profile-header-main > div > div.zm-profile-header-info > div > div.zm-profile-header-description.editable-group > span.info-wrap.fold-wrap.fold.disable-fold > span.fold-item > span::text').extract())
        item['ellipsis'] = ''.join(response.css(
            'body > div.zg-wrap.zu-main.clearfix > div.zu-main-content > div > div.zm-profile-header.ProfileCard > div.zm-profile-header-main > div > div.top > div.title-section > div::text').extract())

        item['location'] = ''.join(response.css('.location .topic-link::text').extract())

        item['major'] = ''.join(response.css('.business .topic-link::text').extract())

        head_url = re.sub(r'_l.', '.', ''.join(response.css('.body .Avatar--l::attr(src)').extract()))
        arr = []
        arr.append(head_url)
        item['head_image'] = head_url
        item['image_urls'] = arr
        item['ask'] = int(''.join(response.css('.active  .item .num::text').extract()))

        item['answer'] = int(''.join(response.css('.item:nth-child(3) .num::text').extract()))

        item['articles'] = int(''.join(response.css('.item:nth-child(4) .num::text').extract()))

        item['collected'] = int(''.join(response.css('.item:nth-child(5) .num::text').extract()))

        item['public_editor'] = int(''.join(response.css('.item:nth-child(6) .num::text').extract()))

        item['views'] = int(''.join(response.css('.zg-gray-normal strong::text').extract()))

        if response.url:
            item['main_page'] = response.url
        print response.url
        item['_id'] = hashlib.sha1(response.url).hexdigest()
        yield item

此处我使用了 用户url的sha一看作主键_id,用来存入数据库排重
脚下大家曾经获得了七个用户的数码,并且yield出去,接下去大家要得到用户关切的列表:
第1大家先得到用户关切人口研讨所对应的ULX570L,同样这里用CSS Selector取到ULacrosseL之后通过1个回调方法进入下八个页面取到关切的用户列表,这里就不赘述了

   urls = response.css(
            'body > div.zg-wrap.zu-main.clearfix > div.zu-main-sidebar > div.zm-profile-side-following.zg-clear > a:nth-child(1)::attr(href)').extract()

        if urls:
            for url in urls:
                url = 'https://www.zhihu.com'   url
                yield scrapy.Request(url=url, callback=self.parse_followers,headers=ZHIHU_HEADER, cookies=ZHIHU_COOKIE)

    def parse_followers(self, response):
        urls = response.xpath('//*[@id="zh-profile-follows-list"]/div/div/a/@href').extract()
        if urls:
            for url in urls:
                url = self.base_url   url
                yield scrapy.Request(url=url, callback=self.parse,headers=ZHIHU_HEADER, cookies=ZHIHU_COOKIE)

通过,乐乎就足以一贯运营下去了。

设置运维上面我们写的那些代理

settings.py
DOWNLOADER_MIDDLEWARES = {
   'httpbin.middlewares.HttpbinProxyMiddleware': 543,
}

将item数据存至数据库

拍卖item首假诺由pipeline完毕的,在这里大家必要自定义贰个pipeline

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html


import pymongo
from zhihu_spider.items import ZhihuSpiderItem
# from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
class ZhihuSpiderPipeLine(object):
    def __init__(self):
        import pymongo
        connection = pymongo.MongoClient('127.0.0.1', 27017)
        self.db = connection["zhihu"]
        self.zh_user = self.db['zh_user']
    def process_item(self, item, spider):
        if isinstance(item, ZhihuSpiderItem):
            self.saveOrUpdate(self.zh_user, item)
    def saveOrUpdate(self, collection, item):
        try:
            collection.insert(dict(item))
            return item
        except:
            raise DropItem('重复喽')

咱俩在init方法中开始化了数据库,然后设置相关的 db_name和collection_name
然后将pipeline路线放置到settings.py文件中,scrapy会自动调用

ITEM_PIPELINES = {
    'zhihu_spider.pipelines.ZhihuSpiderPipeLine': 300,
}

settings.py

  spiders

下载用户头像

首先将settings.py中的ROBOTSTXT_OBEY安装为False,让爬虫不遵守robots.txt中的规定。不然图片是拿不到的,因为:

如上海体育场合,依据规则,网易的robots.txt是不允许大家抓取/people/文件夹下的事物的,不过用户头像正是在那。所以不得不卑鄙一回啊~
scrapy已经提供给咱们多少个写好的的下载器了,小编那边运用 暗中同意的ImagePipeline
利用方法很轻易,只须要在item里进入

 image_urls = scrapy.Field()
 images = scrapy.Field()

七个字段,然后将头像以数组格局传播image_urls里,然后在settings.py里面增添
'scrapy.contrib.pipeline.images.ImagesPipeline': 100
ITEM_PIPELINES字典中便可以了,pipeline路线前边的数字越小,越先被拍卖,越大越后管理,固然安顿有覆盖,数字大的会覆盖小的。

聊到底一步:设置文件下载路径:将IMAGES_STORE = '/path/to/image'添加至settings.py文件中

在指令行中通过 scrapy crawl zhihu 运营爬虫就可以爬取数据了

接下去查询数据库:

上海体育场地正是本身的数据了
头像也获得了

源码地址 https://github.com/dengqiangxi/zhihu_spider.git

DOWNLOADER_MIDDLEWARES = {
  'httpbin.middlewares.HttpbinProxyMiddleware': 543,
}
httpbin_test.py

import scrapy


class HttpbinTestSpider(scrapy.Spider):
    name = "httpbin_test"
    allowed_domains = ["httpbin.ort/get"]
    start_urls = ['http://httpbin.org/get']
    def parse(self, response):
        print(response.text)

spiders

  origin的值其实便是地点的公网地址,可是因为大家用了代理,这里的ip是美国的多个ip

httpbin_test.py

澳门皇家线上娱乐 1

import scrapy
class HttpbinTestSpider(scrapy.Spider):
  name = "httpbin_test"
  allowed_domains = ["httpbin.ort/get"]
  start_urls = ['http://httpbin.org/get']
  def parse(self, response):
    print(response.text)

 澳门皇家线上娱乐 2

origin的值其实便是地点的公网地址,不过因为大家用了代办,这里的ip是美利坚合众国的二个ip

 

澳门皇家线上娱乐 3

二、那么难点来了,未来有那样2个现象,如上所述的话,作者各种请求都会利用代理池里面包车型地铁代理IP地址,然则某些操作是不须要代理IP地址的,那么怎么技术让它请求超时的时候,再采纳代理池的IP地址进行重复请求呢?

  spider:

  一、大家都驾驭scrapy的主导请求步骤是,首先实践父类里面(scrapy.Spider)里面包车型大巴start_requests方法,

  2、然后start_requests方法也是取拿我们设置的start_urls变量里面包车型大巴url地址

  三、最后才实行make_requests_from_url方法,并只传入一个url变量

  那么,我们就足以重写make_requests_from_url方法,从而直接调用scrapy.Request()方法,大家大约的打听一下之中的多少个参数:

  一、url=url,其实正是终极start_requests()方法里面获得的url地址

  二、meta这里我们只设置了一个参数,download_timeout:10,功能就是当首次发起呼吁的时候,等待十分钟,若是未有请求成功的话,就能平素实行download_middleware里面包车型地铁形式,大家上面介绍。

  叁、callback回调函数,其实正是此番的此番具备操作完毕后实施的操作,注意,这里可不是说实行完上边装有操作后,再施行那个操作,比方说请求了四个url,并且成功了,上面就能实施这么些措施。

  4、dont_filter=False,这些很重大,有些人会说过不加的话暗中认可正是False,不过亲测必须得加,效能就是scrapy暗中认可有去重的诀窍,等于False的话就象征不参与scrapy的去重操作。亲测,请求3个页面,获得第二个页面后,抓取想要的操作后,第二页就极度了,唯有加上它技艺够。

import scrapy


class HttpbinTestSpider(scrapy.Spider):
    name = "httpbin_test"
    allowed_domains = ["httpbin.ort/get"]
    start_urls = ['http://httpbin.org/get']

    def make_requests_from_url(self,url):
        self.logger.debug('Try first time')
        return scrapy.Request(url=url,meta={'download_timeout':10},callback=self.parse,dont_filter=False)

    def parse(self, response):
        print(response.text)

  

middlewares.py
下面就是上面请求10秒后超时会执行的操作process_exception方法,心细的同学会发现,我们在spider文件里面输出log的时候,是直接输出的,那是因为scrapy早都在父类里面给你定义好了,直接应用就行,但是在middlewares里面需要自己定义一个类变量定义,才能使用引用。

class HttpbinProxyMiddleware(object):
    logger = logging.getLogger(__name__)

    # def process_request(self, request, spider):
    #     # pro_addr = requests.get('http://127.0.0.1:5000/get').text
    #     # request.meta['proxy'] = 'http://'   pro_addr
    #     pass
    #
    # def process_response(self, request, response, spider):
    #     # 可以拿到下载完的response内容,然后对下载完的内容进行修改(修改文本的编码格式等操作)
    #     pass

    def process_exception(self, request, response, spider):
        self.logger.debug('Try Exception time')
        self.logger.debug('Try second time')
        proxy_addr = requests.get('http://127.0.0.1:5000/get').text
        self.logger.debug(proxy_addr)
        request.meta['proxy'] = 'http://{0}'.format(proxy_addr)

  settings.py

  这里才是根本,我们须要实施middlewares里面包车型地铁HttpbinProxyMiddleware类上边包车型大巴主意,这里必要专注的是自个儿撤销了下载中间件的retry中间件,因为scrapy自身就有机动重试的章程,为了考试成效,这里撤消了默许的重试中间件。

DOWNLOADER_MIDDLEWARES = {
   'httpbin.middlewares.HttpbinProxyMiddleware': 543,
   #设置不参与scrapy的自动重试的动作
   'scrapy.downloadermiddlewares.retry.RetryMiddleware':None
}

  注意:

  上面小编访问的url是httpbin.org,那一个网址并非代理也得以张开,这里您能够在不展开FQ工具的时候,访问google.com,因为本身要好上学用的代办地址基本都以境内的地址,所以即就是google也是打不开的。

  总结:

  上边我们介绍了三种scrapy加代理的写法:

  壹、第二种是直接每一遍访问都选用代理IP发起呼吁

  贰、第二种是在不能平常获取请求结果的时候,再利用代理ip。

  3、我们上学了scrapy中怎么着打字与印刷logging日志,从而轻巧决断问题和推行步骤。

  

小知识:

澳门皇家线上娱乐 4澳门皇家线上娱乐 5

['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'httpbin.middlewares.HttpbinProxyMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2017-11-27 23:36:47 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']

scrapy默认middleware

 

 这里大家能够再Terminal下边打字与印刷一下,简单介绍一下:

  1、在scrapy中的中间件里面,对应的中间件后面包车型客车数字越小,实行优先级越高。

  2、要是您想收回有些download_middlewares的话就直接如笔者上面写的,把它Copy出来,加个None,那样它就不试行了。

  三、补充,假让你看过scrapy的中央实行流程图的话,就能明白scrapy除了下载中间件,还或许有个spider中间件,所以用的时候绝不用错了。

D:项目小项目scrapy_day6_httpbinhttpbin>scrapy settings --get=DOWNLOADER_MIDDLEWARES_BASE
{"scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware": 300, "scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": 500, "scrapy.downloadermiddlewares.redirect.MetaRefres
hMiddleware": 580, "scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware": 900, "scrapy.downloadermiddlewares.redirect.RedirectMiddleware": 600, "scrapy.downloadermiddlewares.r
obotstxt.RobotsTxtMiddleware": 100, "scrapy.downloadermiddlewares.retry.RetryMiddleware": 550, "scrapy.downloadermiddlewares.cookies.CookiesMiddleware": 700, "scrapy.downloadermiddle
wares.defaultheaders.DefaultHeadersMiddleware": 400, "scrapy.downloadermiddlewares.stats.DownloaderStats": 850, "scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddlewar
e": 590, "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 750, "scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware": 350, "scrapy.downloadermiddlewar
es.ajaxcrawl.AjaxCrawlMiddleware": 560}

  

澳门皇家线上娱乐 6

本文由68399皇家赌场发布于呼叫中心培训课程,转载请注明出处:scrapy爬知乎用户关系网以及下载头像

关键词: 68399皇家赌场 日记本 python爬虫 python爬...

最火资讯