为您找到搜索结果:815个
【Python3爬虫】用Python中的队列来写爬虫
当你看着你的博客的阅读量慢慢增加的时候,内心不禁有了些小激动,但是不得不吐槽一下--博客园并不会显示你的博客的总阅读量是多少。而这一篇博客就将教你怎么利用队列这种结构来编写爬虫,最终获取你的博客的总阅读量。 队列是常用数据结构之一,在Python3中要用queue这个模块来实现。queue这个模块实现了三种队列:classqueue.Queue(maxsize=0):FIFO队列(firstinfirstout),先进先出,第一个进入队列的元素会第一个从队列中出来。maxsize用于设置队列里的元素总数,若小于等于0,则总数为无限大。classqueue.LifoQueue(maxsize=0):LIFO队列(lastinfirstout),后进先出,最后一个进入队列的元素会第一个从队列中出来。maxsize用于设置队列里的元素总数,若小于等于0,则总数为无限大。classqueue.PriorityQueue(maxsize=0):优先级队列(firstinfirstout),给队列中的元素分配一个数字标记其优先级。maxsize用于设置队列里的元素总数,若小于等于0,则总...
【Python3爬虫】常见反爬虫措施及解决办法(三)
上一篇博客的末尾说到全网代理IP的端口号是经过加密混淆的,而这一篇博客就将告诉你如何破解!如果觉得有用的话,不妨点个推荐哦~ 首先进入全网代理IP,打开开发者工具,点击查看端口号,看起来貌似没有什么问题:如果你已经爬取过这个网站的代理,你就会知道事情并非这么简单。如果没爬过呢?也很简单,点击鼠标右键然后查看网页源代码,搜索”port“,可以找到如下内容:很明显这不是网页上显示的端口号了,那我们要怎么才能得到真正的端口号呢? 首先需要找到一个JS文件:http://www.goubanjia.com/theme/goubanjia/javascript/pde.js?v=1.0,点开后可以看到如下内容:这么复杂的JS代码看得人头都大了,不过我们发现这个JS代码是一个eval函数,那我们能不能把它解码一下呢?这时候你需要一个工具--脚本之家在线工具,把这些JS代码复制进去: 然后点击解码: 还是一个eval函数,所以再次解码:到这一步,已经比最开始的代码简洁多了,但是还易读性还是很差,所以我们需要先格式化一下:va...
【Python3爬虫】常见反爬虫措施及解决办法(二)
这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法。同样的,如果对你有帮助的话,麻烦点一下推荐啦。 这次我遇到的防盗链,除了前面说的Referer防盗链,还有Cookie防盗链和时间戳防盗链。Cookie防盗链常见于论坛、社区。当访客请求一个资源的时候,他会检查这个访客的Cookie,如果不是他自己的用户的Cookie,就不会给这个访客正确的资源,也就达到了防盗的目的。时间戳防盗链指的是在他的url后面加上一个时间戳参数,所以如果你直接请求网站的url是无法得到真实的页面的,只有带上时间戳才可以。这次的例子是天涯社区的图片分社区:这里我们先打开开发者工具,然后任意选择一张图片,得到这个图片的链接,然后用requests来下载一下这张图片,注意带上Referer字段,看结果如何:importrequestsurl="http://www.51dev.com//FileUpload/news/202003/20200331003637845.jpg"headers={"Referer":"http://pp.tianya.cn/","UserAgent":"Mozill...
【Python3爬虫】常见反爬虫措施及解决办法(一)
这一篇博客,是关于反反爬虫的,我会分享一些我遇到的反爬虫的措施,并且会分享我自己的解决办法。如果能对你有什么帮助的话,麻烦点一下推荐啦。 UserAgent中文名为用户代理,它使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本等信息。对于一些网站来说,它会检查我们发送的请求中所携带的UserAgent字段,如果非浏览器,就会被识别为爬虫,一旦被识别出来,我们的爬虫也就无法正常爬取数据了。这里先看一下在不设置UserAgent字段时该字段的值会是什么:1importrequests23url="http://www.baidu.com"4res=requests.get(url)代码很简单,就是一个发送请求的代码。运行之前打开Fiddler,然后运行代码,在Fiddler中找到我们发送的请求,就可以看到有如下内容:这时候我们的UserAgent字段的值就是python-requests/2.18.4,很显然这不是一个浏览器的UserAgent,而这样的UserAgent很容易就被识别出来,所以我们在编写爬虫的时候一定要注意添加UserAgent。然后对于一些网...
MR案例:基站相关01
字段解释:product_no:用户手机号;lac_id:用户所在基站;start_time:用户在此基站的开始时间;staytime:用户在此基站的逗留时间。product_nolac_idmomentstart_timeuser_idcounty_idstaytimecity_id134291000312255482013-03-1108:55:19.151754088571571282571134291000822254082013-03-1108:58:20.152622488571571270571134291000822269182013-03-1108:56:37.149593624571571103571134291000872270582013-03-1108:56:51.139539816571571220571134291000872254082013-03-1108:55:45.15027680057157166571134291000822254082013-03-1108:55:38.1402252005715711335711342910014026642...
MR案例:WordCount改写
请参照wordcount实现一个自己的MapReduce,需求为: a.输入文件格式: xxx,xxx,xxx,xxx,xxx,xxx,xxx b.输出文件格式: xxx,20 xxx,30 xxx.40 c.功能:根据命令行参数统计输入文件中指定关键字出现的次数,并展示出来 例如:hadoopjarxxxxx.jarkeywordcountxxx,xxx,xxx,xxx(四个关键字)packagedemo0830;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.L...
MR案例:输出/输入SequenceFile
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(FlatFile)。在SequenceFile文件中,每一个key-value对被看做是一条记录(Record),基于Record的压缩策略,SequenceFile文件支持三种压缩类型:NONE:对records不进行压缩; (组合1)RECORD:仅压缩每一个record中的value值(不包括key); (组合2)BLOCK:将一个block中的所有records(包括key)压缩在一起;(组合3)packagetest0820;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.SequenceFile.CompressionType;importorg.apache.hado...
MR案例:小文件合并SequeceFile
SequeceFile是HadoopAPI提供的一种二进制文件支持。这种二进制文件直接将<key,value>对序列化到文件中。可以使用这种文件对小文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。这种文件格式有以下好处:1).支持压缩,且可定制为基于Record或Block压缩(Block级压缩性能较优)2).本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的。3).难度低:因为是Hadoop框架提供的API,业务逻辑侧的修改比较简单。坏处:是需要一个合并文件的过程,且合并后的文件将不方便查看。packagetest0820;importjava.io.IOException;importjava.io.InputStream;importjava.net.URI;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.FileSystem;impo...
MR案例:MR和Hive中使用Lzo压缩
在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩。具体配置过详见配置hadoop集群的lzo压缩//压缩lzop,解压缩lzop-d[root@ncstword]#lzopwords.txt[root@ncstword]#lswords.txtwords.txt.lzo 2).将lzo文件上传到hdfs[root@ncstword]#hadoopfs-putwords.txt.lzo/test/in/words/[root@ncstword]#hadoopfs-ls/test/in/wordsFound1items-rw-r--r-- 1rootsupergroup 1152015-08-2821:13/test/in/words/words.txt.lzo 3).给Lzo文件建立索引Index(两种方式)//单机版[root@ncstword]#hadoopjar>/usr/local/hadoop/hadoop-2.2.0/share/h...
MR案例:CombineFileInputFormat
CombineFileInputFormat是一个抽象类。Hadoop提供了两个实现类CombineTextInputFormat和CombineSequenceFileInputFormat。此案例让我明白了三点:详见解读:MR多路径输入和解读:CombineFileInputFormat类对于单一输入路径情况://指定输入格式CombineFileInputFormatjob.setInputFormatClass(CombineTextInputFormat.class);//指定SplitSizeCombineTextInputFormat.setMaxInputSplitSize(job,60*1024*1024L);//指定输入路径CombineTextInputFormat.addInputPath(job,newPath(args[0]));对于多路径输入情况①://指定输入格式CombineFileInputFormatjob.setInputFormatClass(CombineTextInputFormat.class);//指定SplitSizeCombineT...
MR案例:倒排索引 && MultipleInputs
本案例采用MultipleInputs类实现多路径输入的倒排索引。解读:MR多路径输入packagetest0820;importjava.io.IOException;importjava.lang.reflect.Method;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.InputSplit;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileSplit;importorg.apache....
MR案例:外连接代码实现
【外连接】是在【内连接】的基础上稍微修改即可。具体HQL语句详见Hive查询Joinpackagejoin.map;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.io.VLongWritable;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;...
MR案例:内连接代码实现
本文是对Hive中【内连接】的Java-API的实现,具体的HQL语句详见Hive查询Joinpackagejoin.map;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.io.VLongWritable;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileInputFo...
MR案例:Map-Join
适用场景:一张表十分小【key不可重复】、一张表非常大。用法:在Job提交时,首先将小表加载到DistributedCache分布式缓存中,然后从DistributeCache中读取小表解析成key/value保存到内存中(可以放在HashMap等容器中)。然后扫描大表中的每条记录的key是否能在内存中找到相同joinkey的记录,如果有则直接输出结果。packagejoin.map;importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;importjava.util.HashMap;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache....
MR案例:Reduce-Join
问题描述:两种类型输入文件:address(地址)和company(公司)进行一对多的关联查询,得到地址名(例如:Beijing)与公司名(例如:BeijingJD、BeijingRedStar)的关联信息。可参考MR案例:Map-Join1.map阶段:对比之前的单表关联可知,reduce阶段的key必须为关联两表的key,即address.Id=company.Id。则两表经过map处理输出的key必须是Id。ClassMap<LongWritable,Text,LongWritable,Text>{methodmap(){//获取文件的每一行数据,并以":"分割String[]line=value.toString().split(":");//split对应的文件名StringfileName=((FileSplit)context.getInputSplit()).getPath().getName();//处理company文件的value信息:"BeijingRedStar:1"if(path.indexOf("company")>=0){//<k...