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

  • bilibili怎么删视频(比例比例怎么删视频)

    bilibili怎么删视频(比例比例怎么删视频)

  • 美团金豆有什么用(最新版本美团金豆在哪里)

    美团金豆有什么用(最新版本美团金豆在哪里)

  • ipad怎样取消盲人模式(如何取消ipad盲人模式)

    ipad怎样取消盲人模式(如何取消ipad盲人模式)

  • k30pro有光学防抖吗(k30pro 光学防抖)

    k30pro有光学防抖吗(k30pro 光学防抖)

  • 苹果se2支持快充吗(iphonex支持快充吗)

    苹果se2支持快充吗(iphonex支持快充吗)

  • 小米手机通讯录字体大小怎么调(小米手机通讯录怎么导入到新手机)

    小米手机通讯录字体大小怎么调(小米手机通讯录怎么导入到新手机)

  • 笔记本电脑死机怎么办没反应(笔记本电脑死机解决办法)

    笔记本电脑死机怎么办没反应(笔记本电脑死机解决办法)

  • 抖音评论成功但看不见(抖音评论成功却不显示,要点一下才会显示,怎么回事)

    抖音评论成功但看不见(抖音评论成功却不显示,要点一下才会显示,怎么回事)

  • 苹果xr分享不了热点(苹果xr分享不了软件)

    苹果xr分享不了热点(苹果xr分享不了软件)

  • 电脑适配器未连接是什么意思(电脑适配器未连接什么意思)

    电脑适配器未连接是什么意思(电脑适配器未连接什么意思)

  • 华为平板m6可以插电话卡吗(华为平板m6可以插卡吗)

    华为平板m6可以插电话卡吗(华为平板m6可以插卡吗)

  • ipad2019支持pencil二代吗(ipad2019支持pencil磁吸充电吗)

    ipad2019支持pencil二代吗(ipad2019支持pencil磁吸充电吗)

  • 在word中h这个toc域开关有何作用(在word当中)

    在word中h这个toc域开关有何作用(在word当中)

  • 手机qq怎么改群头像(手机QQ怎么改群名片)

    手机qq怎么改群头像(手机QQ怎么改群名片)

  • 手机上qq群怎么禁言一个人(手机上qq群怎么恢复群)

    手机上qq群怎么禁言一个人(手机上qq群怎么恢复群)

  • 电脑怎么打印图片(电脑怎么打印图片彩色)

    电脑怎么打印图片(电脑怎么打印图片彩色)

  • iphone8自动横屏(苹果8plus自动横屏关闭)

    iphone8自动横屏(苹果8plus自动横屏关闭)

  • 微信群头像可以设置吗(微信群头像可以改吗)

    微信群头像可以设置吗(微信群头像可以改吗)

  • 电脑屏幕休眠时间怎么调(电脑屏幕休眠时间怎么调win11)

    电脑屏幕休眠时间怎么调(电脑屏幕休眠时间怎么调win11)

  • 指纹门锁怎么添加指纹(指纹门锁怎么添加新指纹)

    指纹门锁怎么添加指纹(指纹门锁怎么添加新指纹)

  • 佳能80d和6d的区别(佳能6d与80d)

    佳能80d和6d的区别(佳能6d与80d)

  • 苹果xsmax手机怎么显示电量(苹果xsmax手机怎么录音)

    苹果xsmax手机怎么显示电量(苹果xsmax手机怎么录音)

  • iphonex什么时候出的(iphoneX什么时候停产的)

    iphonex什么时候出的(iphoneX什么时候停产的)

  • 拼多多果园删除的好友怎么加回来(拼多多果园删除好友微信会同步吗)

    拼多多果园删除的好友怎么加回来(拼多多果园删除好友微信会同步吗)

  • BIOS刷新时提示Unknown Type Flash 是怎么回事?怎么解决?(无u刷bios一直闪)

    BIOS刷新时提示Unknown Type Flash 是怎么回事?怎么解决?(无u刷bios一直闪)

  • linux系统中安装Java环境(linux系统中安装auto dock)

    linux系统中安装Java环境(linux系统中安装auto dock)

  • 免费下载仿bilibili二次元视频网苹果CMSV10二次元响应式动漫手机和电脑版-OK源码(免费下载仿iOS主题)

    免费下载仿bilibili二次元视频网苹果CMSV10二次元响应式动漫手机和电脑版-OK源码(免费下载仿iOS主题)

  • 职工福利费的税额
  • 小规模纳税人所得税税率是5还是2.5
  • 广播影视服务税率2023
  • 文化服务费内容是什么
  • 小企业需要计提法定盈余公积吗
  • 固定资产投资子公司交增值税税吗
  • 融资租赁会计核算的一般原则是什么
  • 代缴税款是什么意思
  • 进项税额大于销项税额需要结转吗
  • 已经确认收入的售出商品发生销售退回时
  • 权益净利率如何算
  • 委托收款有什么用
  • 企业拿到产权证后是否还需要缴纳土地使用税呢?
  • 普票开票开给个人怎么开
  • 提前报废资产损失税前扣除
  • 应交增值税期末余额在借方表示什么
  • 公司低价卖房土地增值税计税方法是什么
  • 公司开业期间的费用入管理费用其他行吗
  • 收到老板的钱会计分录
  • 应交增值税为负数代表什么
  • 如何在excel中取最早与最晚
  • 交易性金融资产的交易费用计入哪里
  • 如何禁止远程
  • 苹果14pro max价格
  • 建立无法轻易删除的数据
  • 0x00000024蓝屏怎样解决
  • 公司向股东还款的会计分录
  • 银边翠的栽培历史
  • chat gpt介绍开头
  • wamp设置
  • 弥补以前年度亏损最多几年
  • 个人签订的出租协议
  • uniapp如何使用
  • php ssl
  • 调整以前年度亏损
  • 奥伊米亚康冬季气温低原因
  • vue-router.esm.js?a12b:2046 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation
  • 生产成本二级科目会计分录
  • php判断时间区间
  • 简单的画
  • 不计入法定期间的情形包括
  • 土地增值税成本费用
  • 单位有残疾人能享受
  • 应付暂估账务处理
  • 收到餐饮费专用发票会计分录
  • mongodb的使用教程
  • sql语句中的decode函数
  • 企业季度是如何对账
  • 回购股票不注销如何发可转债
  • 普通发票和增值税发票报销有什么区别?
  • 红冲去年暂估的费用怎么做账
  • 支付宝提现到对公账户要收手续费吗
  • 增值税免税企业可以开具专票吗
  • 外币报表折算差额名词解释
  • 天猫佣金是什么意思
  • 旅游服务住宿费公司不给报销
  • 公司想自己开发票怎么申请
  • mysql日期用什么数据类型
  • window系统怎么取消开机密码
  • windows7开机后网络标志转圈
  • centos 安装chia
  • nero recode
  • 怎么用root登录
  • win8切换到桌面的快捷键
  • opengl编程宝典
  • js导出excel文件前端插件
  • 安卓游戏引擎
  • perl脚本函数
  • node.js教程详细
  • 安卓基于谷歌
  • javascript添加元素
  • python上传本地文件的方法
  • python简要介绍
  • javascript面向对象吗
  • python读写segy数据
  • jquery fullpage
  • 公司车辆购置税怎么做账
  • 福利企业免税有哪些项目
  • 南京市车位产权证办理流程
  • 花店会计主要做什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设