- 浏览: 377048 次
- 性别:
- 来自: 四川
文章分类
- 全部博客 (247)
- 数据库以及sql (11)
- java (48)
- 爬虫学习 (20)
- java编程 (28)
- python编程以及安装和配置 (27)
- oracle数据库 (32)
- mongodb基本操作 (4)
- linux学习 (7)
- easyUI (2)
- nodeJs (8)
- python学习 (16)
- 其他 (13)
- hadoop (1)
- svn (1)
- 汉字 (1)
- windows (2)
- jsp (5)
- fiddler (1)
- ETL (1)
- teamviewer (1)
- maven (4)
- GIT (2)
- datagrip (1)
- ocr (1)
- redis (3)
- mysql (3)
- linux (1)
- 数据服务 (0)
最新评论
1. 伪装user agent
User agent 是HTTP协议的中的一个字段, 其作用是描述发出HTTP请求的终端的一些信息。 服务器通过这个字段就可以知道要访问网站的是什么人了。每个浏览器,每个正规的爬虫都有其固定的user agent,因此只要将这个字段改为这些知名的user agent,就可以成功伪装了。不过,不推荐伪装知名爬虫,因为这些爬虫很可能有固定的IP,如百度爬虫。与此相对的,伪装浏览器的user agent是一个不错的主意,因为浏览器是任何人都可以用的,换名话说,就是没有固定IP。推荐准备若干个浏览器的user agent,然后每次发送请求的时候就从这几个user agents中随机选一个填上去。IE的几个user agent如下:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
设置代码如下(假设使用JAVA + HttpClient 4.1.2)
HttpGet getMethod = new HttpGet("URL");
getMethod.setHeader("User-Agent", "user agent内容");
python如下
定义一个user agent列表
list_User_Agent=[
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2) ",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
]
def getContent(url,list_User_Agent):
'''@获取403禁止访问的网页,反ip查封 '''
random_header=random.choice(list_User_Agent)#在请求头列表中随机的取出一个请user_agent
print random_header
req=urllib2.Request(url)
req.add_header("User-Agent",random_header)
req.add_header("Host", "www.tianyancha.com")
req.add_header("Referer", "www.tianyancha.com")
req.add_header("CheckError","check")
req.add_header("GET",url)
req.add_header("Cookie","自己根据实际情况写")
content=urllib2.urlopen(req).read()
return content
getContent(url_temp,list_User_Agent)
2. log in
虽然有些网站不登陆就能访问,但是它一检测到某IP的访问量有异常,就会马上提出登陆要求。如果是不带验证码的,那么果断登陆吧。不过,在登陆之前要做些准备——查清楚POST登陆请求时要附带哪些参数。我的做法是先用badboy录制登陆过程,然后将这一过程导出为jmeter文件,最后用jmeter查看登陆所需的参数。查完后,就可以登陆,具体如下所示
复制代码
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost postMethod = new HttpPost("http://passport.cnblogs.com/login.aspx"); //注意用post
//登陆博客园所需要的参数
List nvps = new ArrayList();
nvps.add(new BasicNameValuePair("tbUserName", "风炎"));
nvps.add(new BasicNameValuePair("tbPassword", "zero"));
nvps.add(new BasicNameValuePair("btnLogin", "登 录"));
nvps.add(new BasicNameValuePair("__EVENTTARGET", ""));
nvps.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
nvps.add(new BasicNameValuePair("__VIEWSTATE", "/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt"));
nvps.add(new BasicNameValuePair("__EVENTVALIDATION", "/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05"));
nvps.add(new BasicNameValuePair("ReturnUrl", "http://www.cnblogs.com/"));
nvps.add(new BasicNameValuePair("txtReturnUrl", "http://www.cnblogs.com/"));
postMethod.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = httpclient.execute(postMethod);
复制代码
由于httpClient会自动管理cookie,所以接下来直接get或者post就行了。
3. 使用代理
如果对方用某段时间内某IP的访问次数来判定爬虫,然后将这些爬虫的IP都封掉的话,以上伪装就失效了。对方的这个思路隐含着一个假设:爬虫的访问量必然比正常用户的大很多,因而只要使这个假设不成立就可以了。这时就该代理上场了。所谓代理就是介于用户与网站之间的第三者:用户先将请求发到代理,然后代理再发到服务器,这样看起来就像是代理在访问那个网站了。这时,服务器会将这次访问算到代理头上。同时用多个代理的话,单个IP的访问量就降下去了,于是就有可能逃过一劫。不过,这个方法最大的问题就是找到稳定的代理(有钱买代理的,可以无视这句话)。我目前是在无忧代理找,但找到的大部分都不能用,少部分能用的也不稳定。求分享好用的免费代理。
假设找到/买了N个代理,那么要如何管理这些代理呢?我的想法是做一个类似于内存池的IP池。这样做的好处是便于管理以及易于扩展。当只有一个代理时,其用法如下所示
复制代码
DefaultHttpClient httpclient = new DefaultHttpClient();
//此代理不保证你看到的时候还存活
HttpHost proxy = new HttpHost("u120-227.static.grapesc.cz", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
//如果代理要认证,则加上以下语句
// httpclient.getCredentialsProvider().setCredentials(new AuthScope("proxy adress", proxy port),
// new UsernamePasswordCredentials("username", "password"));
//记得将网址拆成以下形式
HttpHost targetHost = new HttpHost("www.cnblogs.com"); //网站名前面不要加http://
HttpGet httpget = new HttpGet("/FengYan/");
HttpResponse response = httpclient.execute(targetHost, httpget);
复制代码
补充下,如果是ADSL拨号,那么无需担心被封IP,因为一般来说,当你重新拨号时,你会得到一个不一样的IP。
4. 降低访问频率
如果说找不到又免费又稳定的代理呢?那只好用最后一招了——降低访问频率。这样做可以达到与用代理一样的效果——防止被对方从访问量上看出来。当然,在抓取效率上会差很多。此外,降低访问频率只是一个指导思想,在这个思想下,可以得到很多具体做法,例如:每抓取一个页面就休息随机秒(个人感觉比固定时间的要好);限制每天抓取的页面数量。
User agent 是HTTP协议的中的一个字段, 其作用是描述发出HTTP请求的终端的一些信息。 服务器通过这个字段就可以知道要访问网站的是什么人了。每个浏览器,每个正规的爬虫都有其固定的user agent,因此只要将这个字段改为这些知名的user agent,就可以成功伪装了。不过,不推荐伪装知名爬虫,因为这些爬虫很可能有固定的IP,如百度爬虫。与此相对的,伪装浏览器的user agent是一个不错的主意,因为浏览器是任何人都可以用的,换名话说,就是没有固定IP。推荐准备若干个浏览器的user agent,然后每次发送请求的时候就从这几个user agents中随机选一个填上去。IE的几个user agent如下:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
设置代码如下(假设使用JAVA + HttpClient 4.1.2)
HttpGet getMethod = new HttpGet("URL");
getMethod.setHeader("User-Agent", "user agent内容");
python如下
定义一个user agent列表
list_User_Agent=[
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2) ",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
]
def getContent(url,list_User_Agent):
'''@获取403禁止访问的网页,反ip查封 '''
random_header=random.choice(list_User_Agent)#在请求头列表中随机的取出一个请user_agent
print random_header
req=urllib2.Request(url)
req.add_header("User-Agent",random_header)
req.add_header("Host", "www.tianyancha.com")
req.add_header("Referer", "www.tianyancha.com")
req.add_header("CheckError","check")
req.add_header("GET",url)
req.add_header("Cookie","自己根据实际情况写")
content=urllib2.urlopen(req).read()
return content
getContent(url_temp,list_User_Agent)
2. log in
虽然有些网站不登陆就能访问,但是它一检测到某IP的访问量有异常,就会马上提出登陆要求。如果是不带验证码的,那么果断登陆吧。不过,在登陆之前要做些准备——查清楚POST登陆请求时要附带哪些参数。我的做法是先用badboy录制登陆过程,然后将这一过程导出为jmeter文件,最后用jmeter查看登陆所需的参数。查完后,就可以登陆,具体如下所示
复制代码
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost postMethod = new HttpPost("http://passport.cnblogs.com/login.aspx"); //注意用post
//登陆博客园所需要的参数
List nvps = new ArrayList();
nvps.add(new BasicNameValuePair("tbUserName", "风炎"));
nvps.add(new BasicNameValuePair("tbPassword", "zero"));
nvps.add(new BasicNameValuePair("btnLogin", "登 录"));
nvps.add(new BasicNameValuePair("__EVENTTARGET", ""));
nvps.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
nvps.add(new BasicNameValuePair("__VIEWSTATE", "/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt"));
nvps.add(new BasicNameValuePair("__EVENTVALIDATION", "/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05"));
nvps.add(new BasicNameValuePair("ReturnUrl", "http://www.cnblogs.com/"));
nvps.add(new BasicNameValuePair("txtReturnUrl", "http://www.cnblogs.com/"));
postMethod.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = httpclient.execute(postMethod);
复制代码
由于httpClient会自动管理cookie,所以接下来直接get或者post就行了。
3. 使用代理
如果对方用某段时间内某IP的访问次数来判定爬虫,然后将这些爬虫的IP都封掉的话,以上伪装就失效了。对方的这个思路隐含着一个假设:爬虫的访问量必然比正常用户的大很多,因而只要使这个假设不成立就可以了。这时就该代理上场了。所谓代理就是介于用户与网站之间的第三者:用户先将请求发到代理,然后代理再发到服务器,这样看起来就像是代理在访问那个网站了。这时,服务器会将这次访问算到代理头上。同时用多个代理的话,单个IP的访问量就降下去了,于是就有可能逃过一劫。不过,这个方法最大的问题就是找到稳定的代理(有钱买代理的,可以无视这句话)。我目前是在无忧代理找,但找到的大部分都不能用,少部分能用的也不稳定。求分享好用的免费代理。
假设找到/买了N个代理,那么要如何管理这些代理呢?我的想法是做一个类似于内存池的IP池。这样做的好处是便于管理以及易于扩展。当只有一个代理时,其用法如下所示
复制代码
DefaultHttpClient httpclient = new DefaultHttpClient();
//此代理不保证你看到的时候还存活
HttpHost proxy = new HttpHost("u120-227.static.grapesc.cz", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
//如果代理要认证,则加上以下语句
// httpclient.getCredentialsProvider().setCredentials(new AuthScope("proxy adress", proxy port),
// new UsernamePasswordCredentials("username", "password"));
//记得将网址拆成以下形式
HttpHost targetHost = new HttpHost("www.cnblogs.com"); //网站名前面不要加http://
HttpGet httpget = new HttpGet("/FengYan/");
HttpResponse response = httpclient.execute(targetHost, httpget);
复制代码
补充下,如果是ADSL拨号,那么无需担心被封IP,因为一般来说,当你重新拨号时,你会得到一个不一样的IP。
4. 降低访问频率
如果说找不到又免费又稳定的代理呢?那只好用最后一招了——降低访问频率。这样做可以达到与用代理一样的效果——防止被对方从访问量上看出来。当然,在抓取效率上会差很多。此外,降低访问频率只是一个指导思想,在这个思想下,可以得到很多具体做法,例如:每抓取一个页面就休息随机秒(个人感觉比固定时间的要好);限制每天抓取的页面数量。
发表评论
-
采集ymx商品信息
2018-08-29 15:28 531public static void main(String[ ... -
根据百度加密url, 获取真实url
2018-08-06 10:46 0public static void main(String[ ... -
fiddler 抓取 手机https 数据包 完美解决
2018-08-03 12:43 3058转:https://jingyan.baidu.com ... -
无忧代理IP
2018-07-30 16:19 0http://api.ip.data5u.com/dynami ... -
无所不能的四种请求方式(天下武功为怪不破)
2018-07-26 11:50 865package com.teamdev.jxbrowser.c ... -
post请求加json参数方式二
2018-07-24 14:02 2114package com.teamdev.jxbrowser.c ... -
post请求加json参数或xml参数
2018-07-20 18:21 1274import java.io.BufferedReader; ... -
jd编号
2017-11-02 17:59 559京东店铺:https://mall.jd.com/index- ... -
清除google缓存
2017-10-26 11:20 7101.进入 chrome://net-internals/#dn ... -
adb server is out of date. killing... 本地连接夜神模拟器失败、超时
2017-06-19 10:43 1523原因:1.模拟器器设置了代理;2.主要是模拟器和sdk 的ad ... -
fiddler抓取的https请求 数据乱码问题解决方案
2017-06-09 09:44 7298参考地址:http://blog.csdn.net/SomeO ... -
chromium.Browser 禁止加载图片,提升加载速度
2017-05-25 11:29 1214package com.teamdev.jxbrowser.c ... -
chrome 禁止加载网页图片 解决办法
2017-05-25 11:18 23581.在谷歌浏览器中输入:chrome://settings/c ... -
开源爬虫框架的优缺点?
2017-03-22 14:46 833开源爬虫框架各有什么优缺点? 作者:老夏 开发网络爬 ... -
爬虫被封禁原因
2017-03-17 09:37 1562爬虫被封禁常见原因 1. ... -
App数据抓取
2017-03-17 09:32 1120思路: 通过fiddler抓包 ... -
八爪鱼规则学习
2017-03-08 13:44 8611.八爪鱼采集器是任何一个需要从网页获取信息的人都必备的采集工 ... -
java模拟jquery请求动作(模拟点击、选择下拉)
2016-12-29 14:40 4092package com.teamdev.jxbrowser.c ... -
httpclient
2016-11-01 16:37 781package com.teamdev.jxbrowser.c ... -
jsoup + json 解析网页
2016-11-01 16:25 1311package com.teamdev.jxbrowser.c ...
相关推荐
在互联网世界中,爬虫与反爬虫是一场持续的博弈。爬虫,作为一种自动抓取网页信息的程序,被广泛用于数据挖掘、市场分析、搜索引擎优化等领域。然而,随着爬虫技术的发展,网站所有者也开始采取各种反爬虫策略以保护...
2. 反爬虫技术的分类:常见的反爬虫技术可以从多个角度进行分类,如基于IP的反爬虫、基于用户行为的反爬虫、基于浏览器指纹的反爬虫等。 3. IP反制技术:通过限制同一IP地址的访问频率或者在检测到爬虫行为后封禁IP...
随着技术的发展,反爬虫的技术也在不断更新,使得网络爬虫和反爬虫之间的对抗日益激烈。 本研究主要涉及网络爬虫的设计及实现、反爬虫技术的实现及相关技术的研究。通过研究目标网站爬虫门槛的协商及通过的条件,及...
这份文件的标题“智能反爬虫试炼之路.pdf”以及描述“反爬虫攻击的现状 常见的反爬策略 防护新思考 智能反爬虫”暗示了文档内容将围绕当前网络爬虫技术的现状、常见的反爬策略、新的防护思路以及智能反爬虫技术进行...
早年的JavaEye网站曾经深受DOS攻击和爬虫海量抓取造成的负载过高的困扰,项目作者曾经和这个问题进行了为期几年不懈的斗争,并且在总结几年斗争经验后写了一篇总结性博客文章:互联网网站的反爬虫策略浅析 。...
但随着技术的不断进步,反爬虫技术本身也遭遇了挑战,出现了反反爬虫技术,即爬虫开发者采取的绕过反爬措施的方法。 反爬虫机制主要包括伪装用户代理、设置IP地址代理、使用自动化测试工具调用浏览器等策略。伪装...
本人多年使用的爬虫与反爬虫经验 原理+中间件+源代码 各种爬虫技术+针对各种爬虫而开发的反爬虫技术
此次利用python来进行爬虫与反爬虫的设计,主要是通过python来进行爬虫的识别以及爬虫的拒绝来最终达到反爬虫的功能。首先在爬虫的过程中,需要有以下方面: (1)请求网络数据, (2)HTML页面解析, (3)数据的...
为了应对这些爬虫带来的问题,Python反爬虫设计成为了网站维护者必须面对的挑战。反爬虫设计的目的是为了保护网站数据不被非法爬取,以及防止爬虫程序对网站正常运行造成干扰。以下内容详细介绍了几种识别爬虫的方法...
网络爬虫作为一种自动化获取网页信息的工具,对网站的数据安全和服务器压力构成了潜在威胁,因此,网站开发者会采用各种反爬虫策略来保护自身资源。本文将深入探讨常见的前端和后端反爬虫手段。 首先,前端反爬虫...
在本研究中,江西科技师范大学的张宝刚以全国高校官网排名情况的爬取为例,详细阐述了基于Python的网络爬虫技术的实现原理及其遇到的一些反爬虫技术的应对策略。 首先,网络爬虫程序的开发需要经过多个步骤。其中,...
这篇文档《基于Python的反反爬虫技术分析与应用》深入探讨了如何利用Python有效地应对这些反爬虫措施,以下是对其中关键知识点的详细阐述。 1. **伪装浏览器**:反爬虫技术常常通过检测User-Agent来识别爬虫。为绕...
针对采取了字体反爬虫策略的网站进行反反爬虫程序的设计源码(含电影、汽车、实习网站).zip 针对采取了字体反爬虫策略的网站进行反反爬虫程序的设计源码(含电影、汽车、实习网站).zip 针对采取了字体反爬虫策略的...
反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等...
分析网站的反爬虫策略进行反反爬虫项目python源码+项目说明+模型.zip 分析网站的反爬虫策略进行反反爬虫项目python源码+项目说明+模型.zip 分析网站的反爬虫策略进行反反爬虫项目python源码+项目说明+模型.zip 分析...
反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等...
python 反爬虫
信息安全课程设计基于python实现分析网站的反爬虫策略并进行反爬虫源码.zip信息安全课程设计基于python实现分析网站的反爬虫策略并进行反爬虫源码.zip信息安全课程设计基于python实现分析网站的反爬虫策略并进行反...
《SinaSpider:动态IP策略在应对新浪反爬虫机制中的应用》 在互联网大数据时代,数据抓取已经成为获取信息的重要手段。对于大型网站如新浪,由于其丰富的信息量和实时性,吸引了众多爬虫的关注。然而,新浪为了保护...