位置: IT常识 - 正文

当爬虫被拒绝时(Access Denied) 风中之炎 博客园(爬虫失败的原因)

编辑:rootadmin
当爬虫被拒绝时(Access Denied) - 风中之炎 - 博客园当爬虫被拒绝时(Access Denied) 由于要准备测试数据,不得不大量爬取某个网站的内容。为了防止被封,特意将爬虫设计为单线

推荐整理分享当爬虫被拒绝时(Access Denied) 风中之炎 博客园(爬虫失败的原因),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:爬虫遇到的问题和解决方案,爬虫被拦截,爬虫被拒绝访问,爬虫失败的原因,爬虫爬到一半被屏蔽了,爬虫被禁止怎么办,爬虫失败的原因,爬虫失败的原因,内容如对您有帮助,希望把文章链接给更多的朋友!

当爬虫被拒绝时(Access Denied)

由于要准备测试数据,不得不大量爬取某个网站的内容。为了防止被封,特意将爬虫设计为单线程同步的爬虫。结果在爬了大约3万个页面的时候,对方发回Access Denied。等一段时间后再启动爬虫,结果还是Access Denied。这时才明白这样的想法太天真了,当初就应该找其它方法来避免才对。而本文则记述了这些其它方法。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内容");

2. log in

虽然有些网站不登陆就能访问,但是它一检测到某IP的访问量有异常,就会马上提出登陆要求。如果是不带验证码的,那么果断登陆吧。不过,在登陆之前要做些准备——查清楚POST登陆请求时要附带哪些参数。我的做法是先用badboy录制登陆过程,然后将这一过程导出为jmeter文件,最后用jmeter查看登陆所需的参数。查完后,就可以登陆,具体如下所示复制代码

DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost postMethod = new HttpPost("http://passport.cnblogs.com/login.aspx"); //注意用post

//登陆博客园所需要的参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 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);

当爬虫被拒绝时(Access Denied)  风中之炎  博客园(爬虫失败的原因)

复制代码

由于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. 降低访问频率

如果说找不到又免费又稳定的代理呢?那只好用最后一招了——降低访问频率。这样做可以达到与用代理一样的效果——防止被对方从访问量上看出来。当然,在抓取效率上会差很多。此外,降低访问频率只是一个指导思想,在这个思想下,可以得到很多具体做法,例如:每抓取一个页面就休息随机秒(个人感觉比固定时间的要好);限制每天抓取的页面数量。

5. 总结

防止被封的“理”是伪装成正常用户,只要按着这个“理”走,总能找到具体的“法”。虽说如此,对于一个接触爬虫不久的小白,例如在下,是很难知道正常用户访问一个网站时的所有细节的。因此,知道些反爬虫的“法”,然后有针对地进行拆招还是十分必要的。描述反爬的“法”的文章,推荐“互联网网站的反爬虫策略浅析”。

分类: 杂文

本文链接地址:https://www.jiuchutong.com/zhishi/303710.html 转载请保留说明!

上一篇:【Visual C++】游戏开发四十九 浅墨DirectX教程十七 三维天空的实现(《visual c++游戏编程基础》)

下一篇:解决ECharts官网打开缓慢的问题(echarts 官网)

  • 华为相册如何一排显示三张(华为相册如何一次删除)

    华为相册如何一排显示三张(华为相册如何一次删除)

  • 微信群怎么屏蔽(微信群怎么屏蔽朋友圈)

    微信群怎么屏蔽(微信群怎么屏蔽朋友圈)

  • 云音响怎么连接网络(智能云音响怎么连接)

    云音响怎么连接网络(智能云音响怎么连接)

  • 小米真无线降噪耳机3pro怎么更新(小米真无线降噪耳机3pro)

    小米真无线降噪耳机3pro怎么更新(小米真无线降噪耳机3pro)

  • 苹果11摄像机闪光灯怎么开(苹果摄像机闪光灯)

    苹果11摄像机闪光灯怎么开(苹果摄像机闪光灯)

  • 苹果手机蓝牙标志没了(苹果手机蓝牙标志一直显示)

    苹果手机蓝牙标志没了(苹果手机蓝牙标志一直显示)

  • win10更新右键没有卸载(win10更新右键没有卸载选项)

    win10更新右键没有卸载(win10更新右键没有卸载选项)

  • qq信息怎么显示屏幕上(QQ信息怎么显示未读)

    qq信息怎么显示屏幕上(QQ信息怎么显示未读)

  • 红米手机网易云音乐安装失败(红米手机网易云闪退)

    红米手机网易云音乐安装失败(红米手机网易云闪退)

  • 抖音公众号不能充值(抖音公众号是干嘛的)

    抖音公众号不能充值(抖音公众号是干嘛的)

  • x-find手机是什么牌子(find x是什么手机型号)

    x-find手机是什么牌子(find x是什么手机型号)

  • 感应充电器怎么充电(感应充电器怎么检测好坏)

    感应充电器怎么充电(感应充电器怎么检测好坏)

  • 荣耀play4tpro有nfc吗(荣耀play4tpro有没有nfc功能)

    荣耀play4tpro有nfc吗(荣耀play4tpro有没有nfc功能)

  • mate30图标怎么自动排列(华为mate30手机桌面图标怎么自动排列)

    mate30图标怎么自动排列(华为mate30手机桌面图标怎么自动排列)

  • 华为nova7pro上市时间(华为nova7 pro发售)

    华为nova7pro上市时间(华为nova7 pro发售)

  • 手机在线2g一定是关联吗(手机2g在线是在线还是不在线)

    手机在线2g一定是关联吗(手机2g在线是在线还是不在线)

  • 文件打印出来内容是半页怎么办(文件打印出来内容不全可以补打一次吗)

    文件打印出来内容是半页怎么办(文件打印出来内容不全可以补打一次吗)

  • 苹果闹钟铃声自动变系统默认(苹果闹钟铃声自动变小了怎么办)

    苹果闹钟铃声自动变系统默认(苹果闹钟铃声自动变小了怎么办)

  • 华为mate30机身尺寸(华为mate30机身尺寸厘米)

    华为mate30机身尺寸(华为mate30机身尺寸厘米)

  • 闲鱼验机中心多久发货(闲鱼验机中心多少钱一次)

    闲鱼验机中心多久发货(闲鱼验机中心多少钱一次)

  • 华为耳机freebuds3可以同时连两个手机吗(华为耳机freebuds3怎么连接)

    华为耳机freebuds3可以同时连两个手机吗(华为耳机freebuds3怎么连接)

  • 苹果平板为什么下载不了软件(苹果平板为什么充不进去电)

    苹果平板为什么下载不了软件(苹果平板为什么充不进去电)

  • 安卓有几个组件(安卓有几个组件组成)

    安卓有几个组件(安卓有几个组件组成)

  • 腾讯地图如何免流(腾讯地图如何免费标注自己店铺位置)

    腾讯地图如何免流(腾讯地图如何免费标注自己店铺位置)

  • 抖音币20万提现是多少(抖音20万抖币主播能提现多少)

    抖音币20万提现是多少(抖音20万抖币主播能提现多少)

  • 芒果会员的二维码在哪(芒果会员二维码共享)

    芒果会员的二维码在哪(芒果会员二维码共享)

  • 怎么一次性删除微信好友(怎么一次性删除word表格里的文字)

    怎么一次性删除微信好友(怎么一次性删除word表格里的文字)

  • 图例位于底部怎么设置(图例位于底部怎么弄Word)

    图例位于底部怎么设置(图例位于底部怎么弄Word)

  • 毕业设计 基于树莓派的AI视觉机械臂小车(毕业设计基于web难还是JAVA)

    毕业设计 基于树莓派的AI视觉机械臂小车(毕业设计基于web难还是JAVA)

  • 盈利能力的概念及内容
  • 发票丢失第一联盖章能用么
  • 广告费的税前扣除是多少
  • 存货盘盈如何处理
  • 个人所得税专项扣除子女教育标准
  • 未结转本年利润影响报表吗
  • 子公司利润母公司要交税吗?
  • 为职工代垫的水电费应计入
  • 无形资产摊销年限
  • 购买空调算什么费用
  • 特种设备电梯如何监管
  • 划拨土地划转是什么意思
  • 外企农业公司
  • 施工单位对分包单位能罚款吗
  • 申报财产租赁合同印花税是在什么情况下?
  • 委托收款有什么用
  • 发票不一致是什么原因
  • 用友填制凭证外币科目没弹出
  • 12月计提税金
  • Windows11怎么免费升级专业版
  • win8.1技巧
  • 让记事本文件自动删除
  • window11 正式版
  • 文件被占用无法删除
  • 担保公司计提的费用
  • linux如何删除lv
  • 长期借款科目的期末余额
  • 划拨用地无使用权怎么办
  • 业务招待费的纳税筹划
  • 有限公司股权转让怎么办理流程
  • framework启动
  • 以股权出资成立公司的模板
  • 基于骨骼关键点的动作识别
  • 溢价收购股权会计处理案例
  • 垃圾分类手工小模型
  • php下载文件到指定目录
  • 超市电子发票怎么开
  • 境外企业在境内投资是否备案
  • 健身房注册公司名称带超字
  • 周转材料包装箱属于存货分类的
  • 在建工程转固定资产的账务处理
  • mysql主键和索引
  • 收到法院款项如何做账
  • 残保金是什么单位收的
  • 企业的其他应付款怎么处理
  • Mysql数据库分库分表语句
  • 跨年租金如何确认收入
  • 员工购买口罩会计科目
  • 发票本月没有认证能用吗
  • 按季度报税怎么处理
  • 借款后的报销流程怎么写
  • 股份有限责任公司是什么意思
  • 银行对账单和回单有什么区别
  • 调整后视镜
  • 排序mysql
  • 使用SSIS创建同步数据库数据任务的方法
  • sql触发器菜鸟教程
  • win7桌面卡死无响应
  • Ubuntu上安装jdk
  • 主板bios恢复出厂默认设置方法
  • win10开始菜单怎么居中
  • 物联网 iot
  • winhost.exe - winhost是什么进程
  • win7系统安装程序无法创建新的系统分区
  • 登录远程linux系统可以用的方法
  • windows mobile
  • win8 电话激活
  • 学习使用grunt来打包JavaScript和CSS程序的教程
  • perl fileparse
  • opengl导入obj能动起来吗
  • css可继承
  • python爬虫正则
  • vim命令详解
  • javascript怎么学
  • android adt
  • 地税税务稽查管理办法
  • 非税收入发票盖什么章
  • 增值税归国家还是地方
  • 南京国税局长是谁
  • 消费税是含税价
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设