精华内容
下载资源
问答
  • 爬虫技术

    千次阅读 2018-05-17 17:12:48
    爬虫技术一 . 爬虫技术是什么 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁...

    爬虫技术

    一 . 爬虫技术是什么

       网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

    二.产生背景

       随着 网络的迅速发展, 万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。 搜索引擎(Search Engine),例如传统的 通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
    (1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
    (2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的 网络数据资源之间的矛盾将进一步加深。
    (3) 万维网数据形式的丰富和 网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现, 通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
    (4)通用搜索引擎大多提供基于 关键字的检索,难以支持根据语义信息提出的查询

    三.爬虫分类
       网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。 实际的网络爬虫系统通常是几种爬虫技术相结合实现的
    1 通用网络爬虫
    通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。 由于商业原因,它们的技术细节很少公布出来。 这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。 虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的应用价值。
    通用网络爬虫的结构大致可以分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始 URL 集合几个部分。为提高工作效率,通用网络爬虫会采取一定的爬行策略。 常用的爬行策略有:深度优先策略、广度优先策略。
    1) 深度优先策略:其基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。 爬虫在完成一个爬行分支后返回到上一链接节点进一步搜索其它链接。 当所有链接遍历完后,爬行任务结束。 这种策略比较适合垂直搜索或站内搜索, 但爬行页面内容层次较深的站点时会造成资源的巨大浪费。
    2) 广度优先策略:此策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。 当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。 这种策略能够有效控制页面的爬行深度,避免遇到一个无穷深层分支时无法结束爬行的问题,实现方便,无需存储大量中间节点,不足之处在于需较长时间才能爬行到目录层次较深的页面。
    2 聚焦网络爬虫
    聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫[8]。 和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。
    聚焦网络爬虫和通用网络爬虫相比,增加了链接评价模块以及内容评价模块。聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。
    1) 基于内容评价的爬行策略:DeBra将文本相似度的计算方法引入到网络爬虫中,提出了 Fish Search 算法,它将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关,其局限性在于无法评价页面与主题相关 度 的 高 低 。 Herseovic对 Fish Search 算 法 进 行 了 改 进 ,提 出 了 Sharksearch 算法,利用空间向量模型计算页面与主题的相关度大小。
    2) 基于链接结构评价的爬行策略 :Web 页面作为一种半结构化文档,包含很多结构信息,可用来评价链接重要性。 PageRank 算法最初用于搜索引擎信息检索中对查询结果进行排序,也可用于评价链接重要性,具体做法就是每次选择 PageRank 值较大页面中的链接来访问。 另一个利用 Web结构评价链接价值的方法是 HITS 方法,它通过计算每个已访问页面的 Authority 权重和 Hub 权重,并以此决定链接的访问顺序。
    3) 基于增强学习的爬行策略:Rennie 和 McCallum 将增强学习引入聚焦爬虫,利用贝叶斯分类器,根据整个网页文本和链接文本对超链接进行分类,为每个链接计算出重要性,从而决定链接的访问顺序。
    4) 基于语境图的爬行策略:Diligenti 等人提出了一种通过建立语境图(Context Graphs)学习网页之间的相关度,训练一个机器学习系统,通过该系统可计算当前页面到相关 Web 页面的距离,距离越近的页面中的链接优先访问。印度理工大学(IIT)和 IBM 研究中心的研究人员开发了一个典型的聚焦网络爬虫。 该爬虫对主题的定义既不是采用关键词也不是加权矢量,而是一组具有相同主题的网页。 它包含两个重要模块:一个是分类器,用来计算所爬行的页面与主题的相关度,确定是否与主题相关;另一个是净化器,用来识别通过较少链接连接到大量相关页面的中心页面。
    3 增量式网络爬虫
    增量式网络爬虫(Incremental Web Crawler)是 指 对 已 下 载 网 页 采 取 增 量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。 和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面 ,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。增量式网络爬虫的体系结构[包含爬行模块、排序模块、更新模块、本地页面集、待爬行 URL 集以及本地页面URL 集。
    增量式爬虫有两个目标:保持本地页面集中存储的页面为最新页面和提高本地页面集中页面的质量。 为实现第一个目标,增量式爬虫需要通过重新访问网页来更新本地页面集中页面内容,常用的方法有:1) 统一更新法:爬虫以相同的频率访问所有网页,不考虑网页的改变频率;2) 个体更新法:爬虫根据个体网页的改变频率来重新访问各页面;3) 基于分类的更新法:爬虫根据网页改变频率将其分为更新较快网页子集和更新较慢网页子集两类,然后以不同的频率访问这两类网页 [1]
    为实现第二个目标,增量式爬虫需要对网页的重要性排序,常用的策略有:广度优先策略、PageRank 优先策略等。IBM 开发的 WebFountain是一个功能强大的增量式网络爬虫,它采用一个优化模型控制爬行过程,并没有对页面变化过程做任何统计假设,而是采用一种自适应的方法根据先前爬行周期里爬行结果和网页实际变化速度对页面更新频率进行调整。北京大学的天网增量爬行系统旨在爬行国内 Web,将网页分为变化网页和新网页两类,分别采用不同爬行策略。 为缓解对大量网页变化历史维护导致的性能瓶颈,它根据网页变化时间局部性规律,在短时期内直接爬行多次变化的网页 ,为尽快获取新网页,它利用索引型网页跟踪新出现网页。
    4 Deep Web 爬虫
    Web 页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也称 Invisible Web Pages 或 Hidden Web)。 表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的 Web 页面。Deep Web 是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的 Web 页面。例如那些用户注册后内容才可见的网页就属于 Deep Web。 2000 年 Bright Planet 指出:Deep Web 中可访问信息容量是 Surface Web 的几百倍,是互联网上最大、发展最快的新型信息资源。
    Deep Web 爬虫体系结构包含六个基本功能模块 (爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS 控制器)和两个爬虫内部数据结构(URL 列表、LVS 表)。 其中 LVS(Label Value Set)表示标签/数值集合,用来表示填充表单的数据源。
    Deep Web 爬虫爬行过程中最重要部分就是表单填写,包含两种类型:
    1) 基于领域知识的表单填写:此方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。 Yiyao Lu[25]等人提出一种获取 Form 表单信息的多注解方法,将数据表单按语义分配到各个组中 ,对每组从多方面注解,结合各种注解结果来预测一个最终的注解标签;郑冬冬等人利用一个预定义的领域本体知识库来识别 Deep Web 页面内容, 同时利用一些来自 Web 站点导航模式来识别自动填写表单时所需进行的路径导航。
    2) 基于网页结构分析的表单填写: 此方法一般无领域知识或仅有有限的领域知识,将网页表单表示成 DOM 树,从中提取表单各字段值。 Desouky 等人提出一种 LEHW 方法,该方法将 HTML 网页表示为DOM 树形式,将表单区分为单属性表单和多属性表单,分别进行处理;孙彬等人提出一种基于 XQuery 的搜索系统,它能够模拟表单和特殊页面标记切换,把网页关键字切换信息描述为三元组单元,按照一定规则排除无效表单,将 Web 文档构造成 DOM 树,利用 XQuery 将文字属性映射到表单字段
    Raghavan 等人提出的 HIWE 系统中,爬行管理器负责管理整个爬行过程,分析下载的页面,将包含表单的页面提交表单处理器处理,表单处理器先从页面中提取表单,从预先准备好的数据集中选择数据自动填充并提交表单,由爬行控制器下载相应的结果页面。



    展开全文
  • 网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫技术 爬虫技术网络爬虫...
  • 爬虫技术PPT课件.ppt

    2021-07-16 09:35:10
    爬虫技术PPT,爬虫技术爬虫技术课件
  • 网络爬虫技术

    2015-02-27 18:30:41
    网络爬虫技术
  • 爬虫技术初探

    2019-03-13 10:02:38
    python 爬虫技术基础,很好的入门参考资料,分享给需要的朋友。
  • java爬虫技术

    2018-10-12 15:58:52
    使用ide工具编写爬虫技术,可以查出网站上的数据。
  • 利用java技术实现爬虫技术获取数据进行数据分析及为云计算或大数据,人工智能服务,实现了爬取图片资源关键字爬取,个人信息爬取
  • 网络爬虫技术的研究

    2019-04-26 11:46:15
    爬虫技术 可视化爬虫抓取流程,可爬取任意网页数据,API导出,秒级同步.爬虫技术 一键自动云抓取,支持IP切换,验证码识别,不怕防采集,80万+用户的选择
  • Python爬虫技术

    千次阅读 2019-07-20 14:18:32
    1.爬虫技术概述 爬虫,即网络爬虫,是通过递归访问网络资源,抓取网络中信息的技术。 互联网中也有大量的有价值的信息数据,手动下载效率非常低下,爬虫就是自动化爬取下载些有价值的信息的技术。 互联网中的页面...

    爬虫概述

    1.爬虫技术概述

    爬虫,即网络爬虫,是通过递归访问网络资源,抓取网络中信息的技术。
    互联网中也有大量的有价值的信息数据,手动下载效率非常低下,爬虫就是自动化爬取下载些有价值的信息的技术。
    互联网中的页面往往不是独立存在的,而是通过超链接连接成了一个网络,爬虫程序就像一 只蜘蛛一样,通过访问超链接在这张网络中移动 ,并下载需要的信息,理论上可以将爬取到整个互联网的绝大部分数据。
    爬虫技术最开始来源于搜索引擎技术,是搜索引擎的基础,目前已经普及开成为了非常常用的通用技术。

    2.爬虫的实现

    很多语言都可以用来开发爬虫,理论上只要有访问网络能力的语言都可以用来开发爬虫。 但目前主流的爬虫开发用的主要是python语言,python语言简单 清晰高效开发的特点特别适合于爬虫这种需要根据不同页面灵活高效开发不同处理程序的场景。

    Python爬虫基础之Urllib库

    1.案例1:访问url读取返回结果

    import urllib2
    response = urllib2.urlopen("http://www.baidu.com")
    print response.read()
    

    说明:
    urlopen(url, data, timeout)
    第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
    第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket.
    _GLOBAL_DEFAULT_TIMEOUT
    第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面

    2.案例2:构造request访问url读取返回结果

    import urllib2
    request = urllib2.Request("http://www.baidu.com");
    response = urllib2.urlopen(request)
    print response.read()
    

    说明:
    运行结果是完全一样的,只不过中间多了一个request对象,更加面向对象

    3.案例3:Get提交

    import urllib
    import urllib2
    data = urllib.urlencode({"username":"张三","psw":"123"}) 
    request = urllib2.Request("http://www.baidu.com?"+data) r
    esponse = urllib2.urlopen(request)
    print response.read()
    

    此处通过urlencode方法对请求参数实现URL编码操作

    4.案例4:Post提交

    import urllib
    import urllib2
    data = urllib.urlencode({"username":"park","password":"123"})
    request = urllib2.Request("https://www.baidu.com",data) 
    response = urllib2.urlopen(request)
    print response.read()
    

    5.案例5:设置Headers

    import urllib
    import urllib2
    url = 'http://www.baidu.com'
    data = urllib.urlencode({"username":"park","password":"123"})
    headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3559.6 Safari/537.36'}
    request = urllib2.Request(url, data, headers)
    response = urllib2.urlopen(request)
    print response.read()
    

    有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性。

    6.案例6:代理设置

    urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。
    假如一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止访问。
    则可以设置一些代理服务器,每隔一段时间换一个代理,以此绕过ip检测。

    import urllib2	
    enable_proxy = True
    proxy_handler = urllib2.ProxyHandler({"http" : 'http://127.0.0.1:1080'}) null_proxy_handler = urllib2.ProxyHandler({})
    if enable_proxy:
         opener = urllib2.build_opener(proxy_handler)
    else:
        opener = urllib2.build_opener(null_proxy_handler) urllib2.install_opener(opener)
    

    7.案例7:超时时间设置

    import urllib2
    response = urllib2.urlopen('http://www.baidu.com', timeout=10)
    或
    import urllib2
    response = urllib2.urlopen('http://www.baidu.com',data, 10)
    

    8.案例8:开启调试模式

    可以通过下面的方法把 Debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便调试

    import urllib2
    httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler  =  urllib2.HTTPSHandler(debuglevel=1) opener = urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener)
    response = urllib2.urlopen('http://www.baidu.com')
    

    9.案例9:使用cookie

    当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊 实例,传入的参数仅仅是url,data,timeout。
    如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的
    opener来实现对Cookie的设置。

    import cookielib
    import urllib2
    #设置保存cookie的文件,同级目录下的cookie.txt
    filename = 'cookie.txt'
    #声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
    cookie = cookielib.MozillaCookieJar(filename)
    #利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
    handler = urllib2.HTTPCookieProcessor(cookie)
    #通过handler来构建opener
    opener = urllib2.build_opener(handler) #创建一个请求,原理同urllib2的urlopen
    response = opener.open("http://www.baidu.com")
    #保存cookie到文件
    #ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原 文件写入,在这里,我们将这两个全部设置为True。
    cookie.save(ignore_discard=True, ignore_expires=True)
    
    import cookielib
    import urllib2
    #创建MozillaCookieJar实例对象
    cookie = cookielib.MozillaCookieJar()
    #从文件中读取cookie内容到变量
    cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
    #创建请求的request
    req = urllib2.Request("http://www.baidu.com") #利用urllib2的build_opener方法创建一个opener
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
    response = opener.open(req)
    print response.read()
    

    Python爬虫框架

    1.Python爬虫框架介绍

    利用Python的基础网络包开发爬虫是比较麻烦的,市面上有很多基于这套API开发的爬虫框架,大大的简化了Python爬虫的开发
    比较知名的是Scrapy 和PySpider。
    PySpider上手更简单,操作更加简便,增加了 WEB 界面,开发效率高,集成了phantomjs,可以用来处理复杂的js渲染的页面。
    Scrapy自定义程度高,比PySpider更底层一些,适合学习研究,需要学习的相关知识多,不过自己拿来研究分布式和多线程等等是非常合适的。

    2.PySplider安装配置

    a.安装pip
    pip是python的包管理工具 类似RedHat里面的yum 通过pip可以快速下载安装python 软件 隐藏了背后复杂的下载安装的过程
    访问https://pypi.python.org/pypi/pip#downloads
    下载pip安装包
    解压pip-9.0.1.tar.gz
    在该目录下执行 python setup.py install
    将python安装目录下的Scripts配置到PATH环境变量

    b.安装phantomjs
    phantomjs是一个浏览器内核程序,可以在爬虫开发过程中,模拟浏览器运行js,简化js处理过程
    访问http://phantomjs.org/download.html
    下载对应版本phantomjs
    解压phantomjs-2.1.1-windows.zip 将其bin目录配置到PATH环境变量中

    c.使用pip安装pyspider
    pip install pyspider

    d.运行pyspider
    pyspider all

    e.通过浏览器访问pyspider http://localhost:5000

    3.PySpider的使用PySpider语法

    http://docs.pyspider.org/en/latest/

    4.案例:爬去豆瓣电影经典电影前100名信息
    a.经过分析,得到了豆瓣电影的一个访问地址,可以获取电影相关数据的json串,只要访

    问该地址,解析该json就可以得到电影基本信息
    https://movie.douban.com/j/search_subjects?type=movie&tag=经典 &sort=rank&page_limit=100&page_start=0
    b.创建PySpider项目,爬取该地址

    #!/usr/bin/env  python # -*- encoding: utf-8 -*-
    #Created on 2018-11-29 15:50:57
    #Project: DBDY_01
    
    from pyspider.libs.base_handler import * import os;
    
    class Handler(BaseHandler): base_dir = "C:\\park\\DBDY"
    
    crawl_config = {
    }
    
    @every(minutes=24 * 60) def on_start(self):
    self.crawl('https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%BB%8F%E5%85% B8&sort=rank&page_limit=30&page_start=0'
    ,validate_cert=False
    , callback=self.index_page)
    
    @config(age=10 * 24 * 60 * 60) def index_page(self, response):
    marr = response.json["subjects"] for m in marr:
    self.crawl(m["url"],validate_cert=False, callback=self.mv_page)
    
    @config(age=10 * 24 * 60 * 60) def mv_page(self, response):
    #电影名
    mv_name = response.doc("h1 > span").text().encode("gbk") #电影描述
    mv_desc = response.doc("#info").text().encode("gbk") #电影图片地址
    mv_img_url = response.doc("#mainpic img").attr.src;
    
    #创建该电影的文件夹
    mv_dir = self.base_dir+"\\"+mv_name
    if not os.path.exists(mv_dir):
    os.makedirs(mv_dir)
    #创建文本文件保存电影描述
    mv_file = open(mv_dir+"\\"+mv_name+".txt","w")
    
    mv_file.write(mv_desc) mv_file.flush() mv_file.close()
    #下载封面图片
    ###封面图片存储路径
    mv_img_path = mv_dir+"\\"+mv_img_url.split("/")[-1] ###爬取封面图片self.crawl(mv_img_url,validate_cert=False,
    callback=self.mv_img_down,save={"mv_img_path":mv_img_path}) #爬取剧照页面
    mv_photos_url = response.doc(".related-pic .pl > a:nth-child(4)").attr.href self.crawl(mv_photos_url,validate_cert=False,
    callback=self.mv_photos_page,save={"mv_dir":mv_dir})
    
    @config(age=10 * 24 * 60 * 60)
    def mv_photos_page(self, response):
    photoAncrArr = response.doc(".article li a").items() for photoAncr in photoAncrArr:
    self.crawl(photoAncr.attr.href,validate_cert=False, callback=self.mv_photo_page,save=response.save)
    
    @config(age=10 * 24 * 60 * 60)
    def mv_photo_page(self, response): #存储位置
    photos_path=response.save["mv_dir"]+"\\photo" if not os.path.exists(photos_path):
    os.makedirs(photos_path) #图片url
    img_url = response.doc(".mainphoto > img").attr.src self.crawl(img_url,validate_cert=False,
    callback=self.mv_img_down,save={"mv_img_path":photos_path+"\\"+img_url.split("/")[-1]})
    
    @config(age=10 * 24 * 60 * 60) def mv_img_down(self, response):
    img_data = response.content
    img_file = open(response.save["mv_img_path"],"wb") img_file.write(img_data)
    img_file.flush() img_file.close()
    
    展开全文
  • 论坛爬虫技术

    2014-07-29 01:08:22
    网络爬虫技术2014最新概况,文章的主要目的是介绍了不同的论坛和论坛爬虫技术综述
  • 今天小编就为大家分享一篇关于爬虫技术之分布式爬虫架构的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 论文、网络爬虫技术
  • 反爬虫与爬虫技术整理

    万次阅读 2019-04-30 08:57:10
    爬虫技术 目前各类网站出于对数据的保护,会使用各种反爬虫技术来保护自己网站的数据不被他人窃取。 1 登录时对用户名和密码进行加密 例如,对某电子税务局进行登录的过程中,当我们输入用户名、密码以及验证码...

    反爬虫技术

    目前各类网站出于对数据的保护,会使用各种反爬虫技术来保护自己网站的数据不被他人窃取。

    1 登录时对用户名和密码进行加密

    例如,对某电子税务局进行登录的过程中,当我们输入用户名、密码以及验证码点击登录后通过抓包工具可以看出发送登录的那一次post请求的用户名和密码是通过加密算法后得到的,因此我们可以自己编写复杂的算法,对用户名和密码进行加密,只要爬虫的那一方无法得知加密规则,就不能进行模拟登录了。
    例如加密前用户名:Anna151898
    加密后的用户名:
    011613ee4904a45120f9b84663d890196438e833104305c0ae8e59d2f2cb9abcf7802d866f65996560a5da28b3958e57966b0ed31dd28f2c21cbf406ec424c624464f77a2bc046c15634412da292a66739dec38c4e4f6958587d4f1e18ac08b362698f4e5f1b6eb6a32587822a676b8465b569969cb6ee9e18d494e9637e761a

    2 登录时不仅只是用户名和密码

    例如在登录的过程还需要传递一个random_num,这个数字是怎么生成的你就要自己去分析网页去寻找了。

    3 登录时采用复杂的验证码

    现在各种数字字母组合的验证码采用ocr或者深度学习已经能够非常容易的破解了,但是类似于行为验证码例如点击验证码和滑动验证码。

    在这里插入图片描述
    上图为点击验证码,这种验证码一来去识别点击文字的位置比较难,二来服务器会检查你点击的动作,在爬虫请求里是无法模拟这个动作的。

    4 对访问信息进行统计予以封锁

    对访问信息进行统计予以封锁主要体现在以下几个方面:
    如果单个IP访问超过阈值,予以封锁;
    如果单个session访问超过阈值,予以封锁;
    如果单个userAgent访问超过阈值,予以封锁;

    5 User-Agent反爬和Referer反爬

    User-Agent代表浏览器标志,如果一个请求直接从脚本发送过来,服务器判断不是通过浏览器的形式,对这种请求进行阻止,现在这种已经没什么技术含量了,因为爬虫可以携带自定义的User-Agent;
    另外一种是referer反爬,比如用户通过爬虫模拟登录了一个网站,如果直接进行扣款请求操作,必须携带这个请求的上一个网页地址是什么,负责服务器会判定请求非法。

    6 目前比较流行的反爬技术

    通过对淘宝网的分析,得知淘宝在用户输入用户名和密码点击登录按钮时发送的登录post请求并不只是携带了用户名和密码信息,还有一条或者几条信息,例如淘宝携带了一个ua。
    在这里插入图片描述
    这个ua的数据是用户一输完用户名就会产生一个ua,而且这个ua应该是淘宝服务器后台生成的,而且ua在每次动作都都会变化,淘宝的反爬还是很强大的。
    下面讲解一下为什么淘宝登录无法破解?
    首先我们在输入用户名完成后,会向服务器发送一个post请求,服务器返回一个ua
    这里有的人可能会想到采用selenium去模拟浏览器来输入这个用户名的操作不就行了,因为selenium会驱动我们电脑上真实存在的浏览器来代替我们进行输入、点击等操作。这里要介绍一下,在任何语言中使用selenium都需要安装相应的浏览器驱动,例如我们在Python里写上在淘宝登录页面用户名这个输入框输入11111时,是需要浏览器驱动来启动浏览器来完成这一动作,服务器后台其实很容易判断这一过程是真实的人在浏览器上输入还是采用selenium来输入的。

    爬虫技术

    介绍了反爬技术我们再来介绍一下爬虫技术

    1 模拟登录的过程

    在我们登录某一个网站时,登录的过程一般就一条post请求,只要携带正确的参数,包含用户名和密码以及其它参数进行发送就可以登录成功。当然,参数一定要正确。遇到用户名和密码是加密的要去分析网页代码,找到加密算法的原理,自己写一个对应的将用户名和密码进行加密。
    当遇到登录过程发送的参数除了用户名和密码外,要从网页源码中进行分析,其它那些参数怎么来的。

    2 验证码破解

    对于数字字母验证码包括数字计算,都是先获取这张验证码图片,利用OCR技术及深度学习技术进行识别。那么对于滑动验证码和点击的验证码怎么弄就比较麻烦了,因为在爬虫里很难实现这个动作。之前接触的一个项目对于点击的验证码有一个插件,使用那个插件得到验证码成功验证时返回的信息,将这条信息带入登录请求中进行发送。这种问题再于插件得到的验证信息有时间限制,而且去操作插件进行点击验证时需要人手动去点击的。

    3 伪装

    爬虫是可以进行伪装成特定浏览器的,在user-agent里进行添加;遇到反Referer的,需要分析我们发送的请求在真实环境下的上一级网页目录是什么,将这个网址带进去。

    4 使用ip代理

    爬虫会长时间去模拟不同用户访问一个网站,在访问的过程中,由于一般都放在一个电脑上,因此IP地址不会变。服务器那边会检查不同用户的IP地址,长时间多个用户来自于同一个地址,会对这个IP地址进行封杀。针对这种去情况,使用IP代理,伪装成不同的IP地址对服务器进行访问。

    展开全文
  • 爬虫技术的代码

    2013-05-09 21:25:51
    爬虫技术的代码
  • patyon爬虫技术PDF课件

    2018-10-30 16:29:36
    patyon爬虫技术PDF课件,Python核心编程(中文版第2版)python语言从入门到精通
  • 爬虫之反爬虫技术

    2018-09-20 20:08:29
    学习爬虫肯定要了解反爬虫技术,因为在你爬取网页的时候不可避免的会遇到各种各样的反爬虫技术,但是大致可以分为四类 1.robots.tet文件,这是一个君子协定,你遵守也行,不遵守也行,但是一般情况下我是不遵守的,...

    学习爬虫肯定要了解反爬虫技术,因为在你爬取网页的时候不可避免的会遇到各种各样的反爬虫技术,但是大致可以分为四类
    1.robots.tet文件,这是一个君子协定,你遵守也行,不遵守也行,但是一般情况下我是不遵守的,我不是君子
    2,通过你的访问频率来判断你是否是爬虫,这个我们可以通过下载限速来规避,也可以使用代理ip达到目的
    3.通过User-Agent来控制访问,这个我在上一篇博客中提到过详细的内容,想看的可以去看一下https://blog.csdn.net/oyjl19961216/article/details/82776349
    4,通过ajax来实现反爬虫,这个是爬虫中遇到的最难得问题,因为如果一个网页是ajax请求的话,那么你的requests.get 或post 都不会得到任何有用的数据,不过道高一尺魔高一丈,咳咳,是一山更比一山高,我们还可以使用selenium来解决这个问题,这是使用selenium的详解https://blog.csdn.net/oyjl19961216/article/details/82777897

    谢谢大家

    展开全文
  • 爬虫技术的伦理研讨

    千次阅读 2020-04-09 21:35:18
    爬虫技术的伦理研讨 本文根据几篇关于爬虫技术的报道针对以下三个问题进行说明 1. 爬虫技术涉及到伦理问题有哪些? 2. 作为一个IT技术人员,应怎么看待爬虫技术的使用? 3. 提出自己对爬虫技术在伦理规则方面发展的...
  • 爬虫技术经历

    千次阅读 2018-12-21 09:06:51
    1. 前言 爬虫,这个词很多朋友第一次听到,第一感觉应该是各种小虫子,应该不会和某种计算机技术联系在一起。...当我的疑问被解决的解决之后,怀着对爬虫技术崇敬的心情做了一个决定,我要实现一个属于自己...
  • 常用爬虫技术

    2020-06-01 21:10:36
    常用爬虫技术 一、常用爬虫技术 爬虫系统的核心部件之一就是HTML网页下载器,下载网页需要实现HTML请求,在python中实现HTML请求比较常用的库主要有两个:urllib库和requests库 urllib库:urllib库是python内置的...
  • 基于Python爬虫技术实现.pdf
  • 基于Python的网络爬虫技术研究基于Python的网络爬虫技术研究基于Python的网络爬虫技术研究
  • htmlunit爬虫技术jar包

    2016-11-23 14:18:21
    htmlunit爬虫技术jar包
  • 主要介绍了爬虫技术框架之Heritrix框架详解,文中通过示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 网络爬虫技术探究毕业设计.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,720
精华内容 37,888
关键字:

爬虫技术

爬虫 订阅