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

  • 40122494(4012212)

    40122494(4012212)

  • 魅族手机怎么投屏到电视(魅族手机怎么投屏到平板)

    魅族手机怎么投屏到电视(魅族手机怎么投屏到平板)

  • vivo NEX 3s支持NFC功能吗(vivo nex3支持nfc吗)

    vivo NEX 3s支持NFC功能吗(vivo nex3支持nfc吗)

  • 华为荣耀8a手机怎么截图(华为荣耀8a手机参数)

    华为荣耀8a手机怎么截图(华为荣耀8a手机参数)

  • 微信打字就卡死怎么办(微信打字就卡死什么原因)

    微信打字就卡死怎么办(微信打字就卡死什么原因)

  • 4k是啥意思(4k是啥意思分辨率多少)

    4k是啥意思(4k是啥意思分辨率多少)

  • 硬盘05警告能用多久(硬盘05有警告)

    硬盘05警告能用多久(硬盘05有警告)

  • 华为p40pro卡怎么装(华为p40pro卡怎么回事)

    华为p40pro卡怎么装(华为p40pro卡怎么回事)

  • 2016112是红米几(201601是红米哪个型号)

    2016112是红米几(201601是红米哪个型号)

  • iphonex用1A还是2A(苹果x用1a充电器好么)

    iphonex用1A还是2A(苹果x用1a充电器好么)

  • ipad各代上市时间(ipad所有型号上市顺序)

    ipad各代上市时间(ipad所有型号上市顺序)

  • 音箱声音小怎么修理(音箱声音小怎么修理视频)

    音箱声音小怎么修理(音箱声音小怎么修理视频)

  • 苹果手机qq更新不了怎么办(苹果手机QQ更新了要重新输入密码吗)

    苹果手机qq更新不了怎么办(苹果手机QQ更新了要重新输入密码吗)

  • 钉钉订正作业老师知道吗(钉钉订正作业老师视角)

    钉钉订正作业老师知道吗(钉钉订正作业老师视角)

  • 可用内存不足无法打印照片什么原因(可用内存不足无法处理对象的外观)

    可用内存不足无法打印照片什么原因(可用内存不足无法处理对象的外观)

  • 键盘上page up是哪个键(键盘page up是什么意思)

    键盘上page up是哪个键(键盘page up是什么意思)

  • 微信账号注销后朋友能看见么(微信账号注销后对方还有聊天记录吗)

    微信账号注销后朋友能看见么(微信账号注销后对方还有聊天记录吗)

  • 电脑怎么不能上网(电脑怎么不能上传附件)

    电脑怎么不能上网(电脑怎么不能上传附件)

  • 探探解除配对怎么恢复(探探解除配对怎么办)

    探探解除配对怎么恢复(探探解除配对怎么办)

  • 苹果11pro支持双卡吗(苹果11pro支持双卡双待双通吗)

    苹果11pro支持双卡吗(苹果11pro支持双卡双待双通吗)

  • 苹果手机呼吸灯怎么开(苹果手机呼吸灯在哪)

    苹果手机呼吸灯怎么开(苹果手机呼吸灯在哪)

  • 新版陌陌圈子在哪(陌陌的圈子功能在哪里?)

    新版陌陌圈子在哪(陌陌的圈子功能在哪里?)

  • 微信怎么分享软件(微信怎么分享软件vivo)

    微信怎么分享软件(微信怎么分享软件vivo)

  • 苹果8无线充电设置在哪(苹果8无线充电怎么充)

    苹果8无线充电设置在哪(苹果8无线充电怎么充)

  • 华为p30pro返回键在哪(华为p30pro返回键手势)

    华为p30pro返回键在哪(华为p30pro返回键手势)

  • wps怎么调整页面顺序(wps怎么调整页面排版顺序)

    wps怎么调整页面顺序(wps怎么调整页面排版顺序)

  • lmpdpsrv.exe是什么进程 lmpdpsrv进程查询(mplugin.exe是什么)

    lmpdpsrv.exe是什么进程 lmpdpsrv进程查询(mplugin.exe是什么)

  • 境外企业在中国境内承包建筑工程应在
  • 装修收入应如何确定
  • 文化建设费退税会计分录怎么做
  • 研发设备可以一次性扣除吗
  • 停车费定额发票税率
  • 纳税人识别号的组成
  • 程序法和实体法的划分标准
  • 小型微利企业如何计算所得税
  • 外购商品赠送客户怎么做账
  • 工会经费可以支付哪些费用
  • 销售部预借差旅费什么凭证
  • 工业企业外购存货的入账价值一般包括增值税吗
  • 发票现金支付的做账增值税
  • 垫付被骗客服承诺退款
  • 应交增值税为什么是销项减进项
  • 企业利用个体户走账
  • 营改增后11
  • 企业增值税留抵退税新闻稿范文
  • 增值税专用发票抵扣最新规定
  • 开采石头要交什么税
  • 固定资产内部调拨流程
  • 残保金和工会经费
  • 税务机构
  • 跨年度的收入如何做分录
  • 电脑怎么一键返回到桌面
  • windows11怎么设置ipv4地址
  • win10系统通知中心在哪
  • linux如何安装
  • 如何禁用win10自动修复
  • 苹果今天推送更新内容
  • 内部审计类型分为哪几种
  • 房产无偿过户给朋友能让他还吗?
  • 外商投资合伙企业有哪些
  • 买保险公司的养老保险合适吗
  • 事业单位资产管理中存在的问题及整改措施
  • 其他业务收入是什么意思
  • react moment
  • 抵扣条件
  • 包装物为什么是无菌的
  • python3矩阵求逆
  • phpcms使用教程
  • 总账和明细账期间相同吗
  • 短期借款利息是多少
  • 公司注销单位公积金账户余额怎么处理
  • 混合销售行为应征增值税不征营业税的是
  • sqlserver2008数据库可疑
  • sql随机抽样
  • 政府补助属于营业外收入吗
  • 广告设计要交文化事业建设
  • 小规模纳税人无票收入申报表怎么填
  • 跌价准备如何入库
  • 银行收到一笔款项企业尚未入账属于什么情况的未达账项
  • 国外公司与国内公司签约
  • 员工借款怎么处理
  • 会计怎么做的
  • 研发费用是管理费用的比例多少不正常
  • mysql数据加解密
  • mysql搜索字段内容
  • centos7 syslog
  • 怎么操作win10系统
  • linux中,什么命令可以控制口令的存活时间?
  • 电脑怎么安装安卓模拟器
  • bios设置从光驱启动优先,可是启动不了
  • 禁止Windows 打游戏怎么办
  • win7任务栏右下角图标空白解决办法
  • mac 怎么复制文件
  • linux系统怎么切换到命令行
  • win7与xp双系统设置
  • win8跳过开机密码
  • linux 命令连接
  • ubuntu20安装unity桌面
  • jquery-file-upload 文件上传带进度条效果
  • javascript的原型,原型链,有什么特点?
  • jQuery Ajax传值到Servlet出现乱码问题的解决方法
  • 税控盘登录密码忘了怎么办怎么重置
  • 甘肃国家税务局兰州专用章图片
  • 纳税服务投诉工作要求
  • 公司注册后多久要去税务局登记
  • 国家税务局的单位性质是什么
  • 作废的发票验旧之后怎么领取新发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设