位置: 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 官网)

  • 网店推广的方法有哪些(网店推广方法500字)

    网店推广的方法有哪些(网店推广方法500字)

  • qq怎么转账给别人(qq怎么转账给别人微信)

    qq怎么转账给别人(qq怎么转账给别人微信)

  • 微信被别人举报加不了好友(微信被别人举报了里面的钱怎么办)

    微信被别人举报加不了好友(微信被别人举报了里面的钱怎么办)

  • 小米手机如何删除通话记录(小米手机如何删除应用行为记录)

    小米手机如何删除通话记录(小米手机如何删除应用行为记录)

  • 苹果手机不能微信支付宝付款吗(苹果手机不能微信视频聊天怎么回事)

    苹果手机不能微信支付宝付款吗(苹果手机不能微信视频聊天怎么回事)

  • qq没消息却显示1(qq没消息却显示1个人)

    qq没消息却显示1(qq没消息却显示1个人)

  • 软件在手机桌面上找不到(软件在手机桌面没有快捷显示怎么办)

    软件在手机桌面上找不到(软件在手机桌面没有快捷显示怎么办)

  • 微信没有实名认证能查到个人信息吗(微信没有实名认证怎么申诉找回密码)

    微信没有实名认证能查到个人信息吗(微信没有实名认证怎么申诉找回密码)

  • 荣耀v30pro怎么开空调(荣耀v30pro怎么开空调遥控器)

    荣耀v30pro怎么开空调(荣耀v30pro怎么开空调遥控器)

  • 微信置顶聊天有什么用(微信置顶聊天有先后顺序吗)

    微信置顶聊天有什么用(微信置顶聊天有先后顺序吗)

  • 苹果更新系统一直白屏(苹果更新系统一直在准备更新)

    苹果更新系统一直白屏(苹果更新系统一直在准备更新)

  • vivos5截图怎么截(vivos5截图怎么截图)

    vivos5截图怎么截(vivos5截图怎么截图)

  • 关闭微信是什么意思(关闭微信是什么页面图片)

    关闭微信是什么意思(关闭微信是什么页面图片)

  • 拍雨景用多大光圈(拍雨景用多大光圈好)

    拍雨景用多大光圈(拍雨景用多大光圈好)

  • 怎么快手老是闪退怎么回事(怎么快手老是闪退)

    怎么快手老是闪退怎么回事(怎么快手老是闪退)

  • 路由器天线上的塑料膜需不需要撕(路由器天线上的塑料要撕掉吗)

    路由器天线上的塑料膜需不需要撕(路由器天线上的塑料要撕掉吗)

  • 怎么改照片大小(手机美图秀秀怎么改照片大小)

    怎么改照片大小(手机美图秀秀怎么改照片大小)

  • 苹果6splus拍照颤抖修复(苹果手机6splus拍照时屏幕抖动)

    苹果6splus拍照颤抖修复(苹果手机6splus拍照时屏幕抖动)

  • 嗨来电怎样接电话(嗨来电怎么自己制作视频)

    嗨来电怎样接电话(嗨来电怎么自己制作视频)

  • 苹果地图怎么标记多个位置(苹果地图怎么标记大头针)

    苹果地图怎么标记多个位置(苹果地图怎么标记大头针)

  • 嘀嗒出租车怎么注册(嘀嗒出租车怎么接单操作流程)

    嘀嗒出租车怎么注册(嘀嗒出租车怎么接单操作流程)

  • 微信不能申请收款码是怎么回事(微信不能申请收款账号)

    微信不能申请收款码是怎么回事(微信不能申请收款账号)

  • 手机wps的页边距在哪里(手机wps页边距怎么弄)

    手机wps的页边距在哪里(手机wps页边距怎么弄)

  • 微信如何直接转到他人银行卡(微信如何直接转账到支付宝)

    微信如何直接转到他人银行卡(微信如何直接转账到支付宝)

  • 华为p30支持人脸识别吗(华为p30人脸解锁怎么设置)

    华为p30支持人脸识别吗(华为p30人脸解锁怎么设置)

  • 手机传感器在哪个位置(手机传感器在哪里找)

    手机传感器在哪个位置(手机传感器在哪里找)

  • 最新大麦网抢票脚本-Python实战(最新大麦抢票脚本)

    最新大麦网抢票脚本-Python实战(最新大麦抢票脚本)

  • 总额法和净额法会计分录对比
  • 汇算清缴期间费用填表说明
  • 6个点税如何计算方法
  • 如何证明自己是低保户
  • 进项税抵扣
  • 资产减值损失跟信用减值损失能合并
  • 职工与企业解除劳动合同后医保怎么办
  • 音乐茶座取什么名字好呢
  • 房产税按租金收入
  • 土地增值税预征率
  • 合伙企业个人所得税怎么申报
  • 发放取暖补贴文件
  • 清算备付金的会计科目
  • 跨年度发现的差错
  • 产品销售返利模式
  • 应收账款无法收回分录
  • 空调可以开专票抵扣吗
  • 安装工程开发票
  • 金税盘如何红冲已抵扣专票
  • 一般纳税人花椒税率
  • 伙食费没有发票可以税前扣除吗
  • 超过单张发票限额
  • 经营性现金净流量是什么意思
  • 暂估运费成本的账务处理
  • 交社保公积金需要劳动合同吗
  • 税金及附加包括地方教育费附加吗
  • 单位缴纳的社保算不算工资
  • 插上u盘电脑无法访问怎么办
  • 如何取消网络拦截
  • 没有抵扣的增值税怎么做账
  • win11正式版问题
  • 冲减备用金该怎么做账
  • 以合同条款无法达成一致要求返还定金
  • 应发工资扣税
  • nodejs应用领域
  • 常用的3个第三方类库
  • php 图片
  • vue错误提示
  • cookie set
  • Blog2N如何计算
  • 赠送的物品有价值吗
  • 办公费用会计科目怎么写
  • 小规模纳税人没有收入怎么报税
  • 公账转给员工工资
  • 租赁业务成本
  • 行政性收费属于什么科目
  • 企业捐款给公益组织
  • 所有者权益包括哪些会计科目
  • 兼职人员的差旅费
  • 更改增值税申报表退税在哪里退钱
  • 给员工购买住房公积金是先办卡吗?
  • 丢失增值税发票已报税证明单取消
  • 子公司注销母公司投资损失企业所得税
  • 外购免税农产品用于职工福利
  • 医保指的是啥
  • 利润分配账务处理例题
  • 实收资本的入账金额包括消费税吗
  • 公司部门财务单独核算
  • 向投资者分配现金股利的会计分录?
  • 预付卡充值入什么科目
  • 增值税普通发票查询
  • win9怎么截图
  • xp无法创建目录或文件
  • win8.1连不上wifi
  • mfc100udll
  • 缩略图无法显示
  • OpenGL ES Emulator比较
  • 置顶在哪里
  • AddForceAtPosition方法:增加刚体点作用力
  • 在windows下搭建snort和base
  • 安卓工程如何正常启动
  • 如何用node搭建服务器
  • Windows环境下搭建Python开发环境的方法
  • javascript基础
  • 农村医保网上如何查询
  • 湖北省国家税务局历任局长
  • 郑州国税局投诉电话
  • 上缴财政总额是什么意思
  • 土地增值税优惠政策办理流程和手续方面的精简措施
  • 小规模纳税人需要建账吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设