精华内容
下载资源
问答
  • Python爬虫常见异常及解决办法

    千次阅读 多人点赞 2020-05-12 20:44:18
    Python 的一个很重要的应用场景就是爬虫,可以高效爬取大量数据,但是在使用过程种可能会出现一些异常:cannot find Chrome binary需要通过配置参数或修改源文件实现设置binary_location参数。持续更新……

    互联网行业介绍

    给大家介绍一门互联网行业认知课https://www.bilibili.com/video/BV1754y1B7w4/,带你一起深入认识互联网这个行业,为将来的就业铺好路。

    1.selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary

    在爬虫时经常会使用selenium实现自动化,来模拟Google访问目标网页,如果出现标题中错误,可能是你自定义目录安装了谷歌浏览器,谷歌的二进制可执行文件(一般文件名为chrome.exe)不在默认目录中,此时有2种解决办法:

    方法一——配置参数

    在初始化Chrome对象时加入参数binary_location来指定你自定义安装的chrome.exe文件的路径,示意如下:

    from selenium import webdriver
     
    options = webdriver.ChromeOptions()
    options.binary_location = r"XXX\Google\Chrome\Application\chrome.exe"
     
    driver = webdriver.Chrome(options=options)
    driver.get("http://www.baidu.com")
     
    print(driver.title)
    driver.quit()
    

    此时再运行就不会报错。
    虽然这种方法可以解决问题,但是每次初始化Chrome对象都需要配置binary_location参数,显得很麻烦,此时可以采用第2种方法。

    方法二——修改源文件

    这是一劳永逸的方法,在selenium库的参数文件options.py中设置chrome.exe的路径,在PyCharm中的示意如下:
    selenium change binary_location
    修改源代码之后,就不需要再指定binary_location参数而直接初始化了。

    展开全文
  • 常见的python应用场景及三方库.zip 机器学习 人工智能AI 爬虫 数据可视化 图形界面 游戏开发 数据分析 数据处理 python三方库总览.doc
  • 不过,有时候我们在开发爬虫的过程中,会遇到这样一种场景,比如我们去抓取一个新闻网站,如果不断地去网站上抓取所有数据,必然效率低下,另外也会造成别人的网站服务降低,导致各大网站非常讨厌爬虫。肯定这种不断...

    前面学习了mongodb数据库,这个数据库有很好的优点,也支持分布式部署,还支持大数据保存,这是一个很好用的数据库。不过,有时候我们在开发爬虫的过程中,会遇到这样一种场景,比如我们去抓取一个新闻网站,如果不断地去网站上抓取所有数据,必然效率低下,另外也会造成别人的网站服务降低,导致各大网站非常讨厌爬虫。肯定这种不断地从原网站下载的方法是不合适的,因此我们必须改变这种做法,从而需要使用redis数据库来解决这个问题。这个又是怎么样说呢?其实这个方法比较常见的方式,比如你去下载网站的数据,可以先缓存起来,然后就可以给自己的应用使用了,就不必要每次都去爬取一次。要缓存起来,一般情况又分为内存缓存和硬盘缓存。对于时间比较短,比如几分钟的缓存,就可以保存在内存里。如果是几天以上的就可以保存在硬盘里。redis数据库就是用来进行内存缓存,大多数的数据都一天之内使用的数据,或者叫做热点数据。有了redis数据库的缓存机制,爬虫就可以先判断缓存里是否有数据,如果没有就再去原网站下载;如果已经存在了,就不需要重复下载了。这样就可以大大提高数据的使用效率,也减轻别人网站的负载。并且redis数据库有一个天生的特性,就是可以设置数据记录定时删除的能力。

     

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。

     

    从以下几个维度,对redis、mongoDB 做了对比

    1、性能

    都比较高,性能对我们来说应该都不是瓶颈

    总体来讲,TPS方面redis要大于mongodb

     

    2、操作的便利性

    redis丰富一些,数据操作方面,redis更好一些,较少的网络IO次数

    mongodb支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富

     

    3、内存空间的大小和数据量的大小

    redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)

     

    mongoDB适合大数据量的存储,依赖操作系统VM做内存管理,吃内存也比较厉害,服务不要和别的服务在一起

     

    4、可用性(单点问题)

    对于单点问题,

     

    redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。

     

    一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡

     

    mongoDB支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。

     

    5、可靠性(持久化)

    对于数据持久化和数据恢复,

     

    redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响

     

    MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性

     

    6、数据一致性(事务支持)

    redis事务支持比较弱,只能保证事务中的每个操作连续执行

     

    mongoDB不支持事务

     

    7、数据分析

    mongoDB内置了数据分析的功能(mapreduce),其他不支持

     

    8、应用场景

    redis:数据量较小的更性能操作和运算上

    MongoDB:主要解决海量数据的访问效率问题

     

    有了上面的分析,就可以明白前面学习mongodb与本文学习redis的选择了。下面就来进行redis的学习,主要windows平台进行,当然你也可以在linux平台进行。

     

    Redis安装

    由于redis基本上已经放弃在windows上版本的维护,所以只能使用旧的版本,对于学习和使用来说,问题不是很大的。只是有一些新功能不能使用了,如果一定要使用这些新功能,也可以在linux部署产品线,毕竟python跨平台很方便的。

     

    如果下载linux下版本,可以在https://redis.io/download网站下载。

    如果下载windows版本,要使用旧版本,在https://github.com/MicrosoftArchive/redis/releases网站下载:

    我这里下载文件是:Redis-x64-3.2.100.msi。

    双击这个文件就可以开始安装,选择合适的目录就可以安装了,安装的过程非常快。安装完成之后,就可以看到这个目录:

    同时也可以看到服务里有服务在启动:

     

    到这里就可以确认redis服务器运行正常了。现在我们使用redis-cli.exe程序来查看一下服务器的版本和相关的配置参数:

     

    可以看到版本是3.2.100,比目前5.0的版本低了很多。

     

    Redis的python操作模块安装

    这模块安装非常简单,只要使用下面命令就可以完成了:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple redis

    这里使用pip安装,同样是使用清华的镜像服务器,安装的速度更快:

     

    完成安装之后,就可以使用代码来测试了。

     

    redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。

     

    redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池

     

    提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET命令对应与StrictRedis.set方法)。Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 简单说,官方推荐使用StrictRedis方法。

     

    可以使用下面的例子来测试:

    #爬虫日记-蔡军生(qq:9073204)
    #https://mysoft.blog.csdn.net/
    #2021-04-03
     
    import redis #导入客户端模块
    
    ip = '127.0.0.1'
    port = 6379
    db = 0
    
    redis_cp = redis.ConnectionPool(host = ip, port = port, db = db) #
    r = redis.StrictRedis(connection_pool = redis_cp)
    
    #
    r.setex('a', 60, 'https://mysoft.blog.csdn.net/')
    print(r.get('a'))
    
    

     

    运行后结果:

    b'https://mysoft.blog.csdn.net/'

    展开全文
  • MapReduce 常见的编程场景之自定义 OutputFormat--数据分类输出1、需求2、分析3、实现 1、需求 现有一些原始日志需要做增强解析处理,流程: 1、 从原始日志文件中读取数据; 2、 根据业务获取业务数据库的数据; 3、 ...

    MapReduce 常见的编程场景之自定义 OutputFormat--数据分类输出

    1、需求

    现有一些原始日志需要做增强解析处理,流程:
    1、 从原始日志文件中读取数据;
    2、 根据业务获取业务数据库的数据;
    3、 根据某个连接条件获取相应的连接结果。

    典型业务场景如:爬虫 URL 管理,移动号码管理。

    2、分析

    程序的关键点是要在一个 MapReduce 程序中根据数据的不同输出类型结果存储到不同目录,这类灵活的输出需求可以通过自定义 OutputFormat 来实现。

    3、实现

    (1)数据 score.txt:
    链接:https://pan.baidu.com/s/1jH0p9PvCRoPTeoAr4-99Fw
    提取码:pbdq

    computer,huangxiaoming,85,86,41,75,93,42,85
    

    数据解释:
    数据字段个数不固定:
    第一个是课程名称,总共四个课程,computer,math,english,algorithm;
    第二个是学生姓名,后面是每次考试的分数。

    (2)实现要点:
    1、 在 MapReduce 中访问外部资源;
    2、 自定义 OutputFormat,改写其中的 RecordWriter,改写具体输出数据的方法 write(),以 score.txt 的 32 条学生考试记录为例,现要求把参考次数 >=7 的输出到一个文件 /output/out1,然后剩下的不合格的参考输出到另外一个文件 /output/out2。

    实现步骤:
    第一步,实现自己的 OutputFormat:

    package com.zc.hadoop.mr.student.opf;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IOUtils;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.RecordWriter;
    import org.apache.hadoop.mapreduce.TaskAttemptContext;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    
    import java.io.IOException;
    
    /**
     * @作者: zc
     * @时间: 2021/2/25 10:40
     * @描述: 自定义 OutputFormat--数据分类输出,实现自己的 OutputFormat
     */
    public class LongOutputFormat extends FileOutputFormat<Text, NullWritable> {
        @Override
        public RecordWriter<Text, NullWritable> getRecordWriter(
                TaskAttemptContext job)
                throws IOException, InterruptedException {
    
            Configuration conf = job.getConfiguration();
            FileSystem fs = FileSystem.get(conf);
            Path p1 = new Path("data/outputformat/out1");
            Path p2 = new Path("data/outputformat/out2");
    
            FSDataOutputStream out1 = fs.create(p1);
            FSDataOutputStream out2 = fs.create(p2);
    
            return new MyRecordWriter(out1, out2);
        }
    
        static class MyRecordWriter extends RecordWriter<Text, NullWritable> {
    
            FSDataOutputStream fsdout1 = null;
            FSDataOutputStream fsdout2 = null;
    
            public MyRecordWriter(FSDataOutputStream fsdout1, FSDataOutputStream fsdout2) {
                super();
                this.fsdout1 = fsdout1;
                this.fsdout2 = fsdout2;
            }
    
            @Override
            public void write(Text key, NullWritable value)
                    throws IOException, InterruptedException {
                String[] strs = key.toString().split("::");
                if (strs[0].equals("1")) {
                    fsdout1.write((strs[1] + "\n").getBytes());
                } else {
                    fsdout2.write((strs[1] + "\n").getBytes());
                }
            }
    
            @Override
            public void close(TaskAttemptContext context)
                    throws IOException, InterruptedException {
                IOUtils.closeStream(fsdout1);
                IOUtils.closeStream(fsdout2);
            }
        }
    }
    
    

    第二步,实现 MapReduce 程序

    package com.zc.hadoop.mr.student.opf;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    
    import java.io.IOException;
    
    /**
     * @作者: zc
     * @时间: 2021/2/25 10:55
     * @描述:
     */
    public class MultipleOutputMR {
    
        static class MultipleOutputMRMapper extends
                Mapper<LongWritable, Text, Text, NullWritable> {
            @Override
            protected void map(LongWritable key, Text value, Context context)
                    throws IOException, InterruptedException {
                // 参考次数大于 7 次算合格
                String[] splits = value.toString().split(",");
                // 科目 + 姓名 + 参考次数( > 7)
                if (splits.length > 9) {
                    context.write(new Text("1::" + value.toString()), NullWritable.get());
                } else {
                    context.write(new Text("2::" + value.toString()), NullWritable.get());
                }
            }
        }
    
        public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
    
            Configuration conf = new Configuration();
            Job job = Job.getInstance(conf);
    
            job.setJarByClass(MultipleOutputMR.class);
    
            job.setMapperClass(MultipleOutputMRMapper.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(NullWritable.class);
    
            job.setOutputFormatClass(LongOutputFormat.class);
    
            FileInputFormat.setInputPaths(job, "data/testfile/score.txt");
    
            Path outpath = new Path("data/outputformat/test");
            FileSystem fs = FileSystem.get(conf);
            if (fs.exists(outpath)){
                fs.delete(outpath, true);
            }
    
            FileOutputFormat.setOutputPath(job, outpath);
    
            boolean waitForCompletion = job.waitForCompletion(true);
            System.exit(waitForCompletion ? 0 : 1);
    
        }
    
    }
    
    

    4、学习内容

    上节学习内容:MapReduce 常见的编程场景 1
    下节学习内容:MapReduce 常见的编程场景之自定义 InputFormat–小文件合并

    展开全文
  • 爬虫基础概念

    2021-01-18 20:24:43
    二、常见的反爬虫机制 1.通过UA识别爬虫:有些爬虫的UA是特殊的,与正常浏览器的不一样,可通过识别特征UA,直接封掉爬虫请求 2.设置IP访问频率,如果超过一定频率,则封掉爬虫请求 3.弹出验证码:如果输入正确的...

    文章来自牛客网友

    一、什么是爬虫和反爬虫

    爬虫:使用任何技术手段,批量获取网站信息的一种方式
    反爬虫:使用任何技术手段,阻止别人批量获取自己网站的一种方式

    二、常见的反爬虫机制

    1.通过UA识别爬虫:有些爬虫的UA是特殊的,与正常浏览器的不一样,可通过识别特征UA,直接封掉爬虫请求
    2.设置IP访问频率,如果超过一定频率,则封掉爬虫请求
    3.弹出验证码:如果输入正确的验证码,则放行,如果没有输入,则拉入禁止一段时间,如果超过禁爬时间,再次触发验证码,则拉入黑名单。当然根据具体的业务,为不同场景设置不同阈值,比如登录用户和非登录用户,请求是否含有refer
    4.通过并发识别爬虫:有些爬虫的并发是很高的,统计并发最高的IP,加入黑名单(或者直接封掉爬虫IP所在C段)
    5.请求的时间窗口过滤统计:爬虫爬取网页的频率都是比较固定的,不像人去访问网页,中间的间隔时间比较无规则,所以我们可以给每个IP地址建立一个时间窗口,记录IP地址最近12次访问时间,每记录一次就滑动一次窗口,比较最近访问时间和当前时间,如果间隔时间很长判断不是爬虫,清除时间窗口,如果间隔不长,就回溯计算指定时间段的访问频率,如果访问频率超过阈值,就转向验证码页面让用户填写验证码
    6.限制单个ip/api token的访问量:比如12分钟限制访问页面180次,具体标准可参考一些大型网站的公开api,如twitter api,对于抓取用户公开信息的爬虫要格外敏感
    7.蜜罐资源:爬虫解析离不开正则表达式匹配,适当在页面添加一些正常浏览器浏览访问不到的资源,一旦有ip访问,这些ip在网上都可以找到。校验出来IP不在白名单就可以阻止访问内容

    三、破解反爬虫机制的几种方法

    1.设置下载延迟:比如数字为5秒,越大越安全
    2.策略2:禁止Cookie:某些网站会通过Cookie识别用户身份,禁用后使得服务器无法识别爬虫轨迹
    3.使用user agent池:每次发送的时候随机从池中选择不一样的浏览器头信息,防止暴露爬虫身份
    4.使用IP池:需要大量的IP资源,可以通过抓取网上免费公开的IP建成自有的IP代理池
    5.分布式爬取:这个是针对大型爬虫系统的,实现一个分布式的爬虫,主要为以下几个步骤
    (1)基本的http抓取工具,如scrapy;
    (2)避免重复抓取网页,如Bloom Filter
    (3)维护一个所有集群机器能够有效分享的分布式队列
    (4)将分布式队列和scrapy的结合
    (5)后续处理,网页析取(如python-goose),存储(如Mongodb)
    (6)模拟登陆-浏览器登录的爬取:设置一个cookie处理对象,它负责将cookie添加到http请求中,并能从http相应中得到cookie,向网站登录页面发送一个请求request,包括登录url、POST请求的数据,Http header利用urllib2.urlopen发生请求,接受web服务器的response。

    展开全文
  • 我们来看一个常见应用场景:当我们使用百度或者其他搜索引擎搜索某个关键字的时候,搜索结果中会包含对应的内容,比如:搜索Python,搜索结果可能包括Python官网,Python相关文章等信息,可是这些信息分布在不同的...
  • 打开我的收藏夹 -- Python爬虫篇(2)

    千次阅读 多人点赞 2021-04-01 14:49:19
    文章目录前言时间戳爬虫中时间戳常见场景时间戳如何转换url去重网页请求的背后流程HTTPHTTP请求的一般流程:HTTP请求(Request):HTTP响应(Response):GET和POST:再了解Cookie 前言 本来以为第二篇没了,就把写了一...
  • 一. 前言 NetDiscovery 是本人开发的一款基于 Vert.x、RxJava 2 等框架实现的通用爬虫框架。它包含了丰富的特性。 二....NetDiscovery 虽然借助了 RxJava 2 ...暂停和恢复是最常见爬虫使用场景,这里借助 CountDownLa...
  • 常见的 App 端的爬虫方式是利用 Appium 和 Airtest 驱动手机打开应用,操作页面,然后通过元素 ID 获取元素的内容,又或者借助 mitmproxy 捕获到请求的数据,最后将数据保存下来。 如果要完成复杂的操作,加快爬虫...
  • 常见的反爬虫机制 通过UA 识别爬虫 有些爬虫的UA是特殊的,与正常浏览器的不一样,可通过识别特征UA,直接封掉爬虫请求 设置IP访问频率,如果超过一定频率,弹出验证码 如果输入正确的验证码,则放行,如果没有...
  • Agent用户代理Refer状态码抓包工具基础介绍数据通讯数据通讯的步骤常见通讯协议网络模型Http请求Http请求与响应应用场景应用场景解析客户端的Http请求一个典型的HTTP请求示例请求方法爬虫介绍什么是爬虫为什么需要...
  • 爬虫之scrapy模拟登陆

    2021-02-09 22:12:22
    爬虫之scrapy模拟登陆 1. 回顾之前的模拟登陆的方法 1.1 requests模块是如何实现模拟登陆的? 直接携带cookies请求页面 找url地址,发送post请求存储cookie ...应用场景 ...cookie过期时间很长,常见于一些不
  • java爬虫-jsoup

    千次阅读 2020-05-24 11:33:24
    文章目录内容简介主要功能 内容简介 ...它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 主要功能 ... 使用DOM或CSS选择器来查找...接下来我们专门针对几种常见的应用场景举例说明j
  • 一、爬虫的定义、爬虫的分类(通用爬虫、聚焦爬虫)、爬虫应用场景爬虫工作原理(最后会发一个完整爬虫代码) 二、http、https的介绍、url的形式、请求方法、响应状态码  url的形式:    请求头:   ...
  • 高级-查找元素:介于打开页面和关闭页面之间,与爬虫常见的HTML页面解析、定位到具体的某个元素类似,区别在于调用者是driver 高级-页面交互:找到元素后,进行“交互”,如键盘输入(需提前导入模块) 高级-等待...
  • 点击上方“编程派”,选择设为“设为星标”优质文章,第一时间送达!爬虫是 Python 的一个常见应用场景,很多练习项目就是让大家去爬某某网站。爬取网页的时候,你大概率会碰到一些反爬措施。...
  • 能够说明 jsonpath的使用场景 能够说明 jsonpath的使用(提取 json中的数据) 能够说明 正则表达式的常见语法 能够说明 re模块的常见用法 能够说明 原始字符串r的用法 了解 爬虫的数据的分类 json相关的方法(load ...
  • 点击上方“一行数据”,选择“置顶星标”公众号干货福利,第一时间送达大家好,我是一行今天分享的文章总结了全网最全的反爬虫方案,强烈建议收藏爬虫是 Python 的一个常见应用场景,很多练习...
  • ‍‍‍‍‍‍‍来源:编程派‍‍‍‍‍‍‍爬虫是 Python 的一个常见应用场景,很多练习项目就是让大家去爬某某网站。爬取网页的时候,你大概率会碰到一些反爬措施。这种情况下,你该如何应对...
  • 一、零基础阶段: 从零开始学爬虫,系统入门,开始从0上手爬虫爬虫除了必需的...多线程,多进程等工作常见应用场景难题讲解 二、主流框架 主流框架Scrapy实现海量数据抓取,从原生爬虫到框架的能力提升,学完你能彻
  • python爬虫--如何爬取翻页url不变的网站

    万次阅读 多人点赞 2018-05-22 19:21:41
    之前打算爬取一个图片资源网站,但是在翻页时发现它的url并没有改变,无法简单的通过request.get...1、什么是ajax几个常见的用到ajax的场景。比如你在逛知乎,你没有刷新过网页,但是你却能看到你关注的用户或者话题...
  • 爬虫是 Python 的一个常见应用场景,很多练习项目就是让大家去爬某某网站。爬取网页的时候,你大概率会碰到一些反爬措施。这种情况下,你该如何应对呢?本文梳理了常见的反爬措施和应对方...
  • 它是一款对目标服务器相对友好的蜘蛛程序,内置了二十余种常见或不常见的浏览器标识,能够自动处理cookie和网页来源信息,轻松绕过服务器限制,智能调整请求间隔时间,动态调整请求频率,防止对目标服务器造成干扰。...
  • 汪海带你做游戏--Unity3D的开发与应用简单的介绍Unity3D开发过程中会遇到的常见问题。主要涉及内容有:场景建模,人物设置,脚本讲解,关联演示,重力感应,等等内容。(一):抓取网页的含义和U...
  • -----使用场景: 1.验证数据完整性 2.所有人都需要提防的场景 -----常见摘要算法: 1.md5 2.sha -----特性: 单向不可逆 不管输入多长,输出长度都是固定的 输入如果一样,输出一定一样 输入只要发生细微变化,输出会...
  • 使用场景 验证数据完整性 所有人都需要提防的场景 常见摘要算法 md5 sha 特性 单向不可逆 不管输入多长,输出长度都是固定的 输入如果一样,输出一定一样 输入只要发生细微变化,输出会有非常明显的变化 ...
  • ①直接携带cookies请求页面 ...(1)直接携带cookies(需要先登录上...①cookie过期时间很长,常见于一些不规范的网站 ②能在cookie过期之前把所有的数据拿到 ③配合其他程序使用,比如其使用selenium把登陆之后的cook
  • python爬虫精选09集(IP代理、requests.post参数、破解有道词典)一.IP代理1.常见代理平台2.作用及理解3.代理IP种类4.实现方法4.1普通代理思路4.2普通代理4.3私密代理+独享代理4.4私密代理+独享代理 - 示例代码4.5...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 211
精华内容 84
关键字:

常见爬虫场景

爬虫 订阅