您的位置:首页 > 其它

爬虫知识5:常见反爬虫机制——User-Agent和代理IP设置

2018-03-30 00:00 274 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PbGc396Dwxjb77F2je/article/details/80154971

常见反爬机制:
1、拒绝非浏览器的访问:可以检查请求头header中的User-agent、referer、cookies:

  • User-agent用来表示请求者的信息,可以搜集User-agent并保存,爬取过程中动态更换在User-agent,伪装成浏览器的形式

  • referer可以使用浏览器分析提取referer信息

  • 需要登录才能操作的页面可以保留cookies,带着cookies信息登录

2、请求延时:在settings.py中设置DOWNLOAD_DELAY = n,n为延迟秒数,不要给别人的服务器造成压力。3、代理的使用:    因此可以动态设置下User-agent及代理。 两个步骤:

  • 在middlewares.py中自定义类

  • 在settings.py中,启用该DOWNLOADER_MIDDLEWARES


1、动态设置user-agent1)安装fake-useragent进入python目录,通过语句pip3 install fake-useragent安装包
2)scrapy框架中设置动态user-agent两个步骤:先自定义类,再应用类  步骤1:在middleware中自定义类MiddleWare自定义类的主要方法:

  • process_request(request,spider)

  • process_response(request,response,spider)

  • process_exception(resquest,exception,spider)


在request方法中写入一下语句,就可以看到不同的user-agent了。from fake_useragent import FakeUserAgent #需要安装
class Middleware_hh(object):
def __init__(self):
self.ua=FakeUserAgent()
def process_request(self,request,spider):
request.headers['USER_AGENT']=self.ua.random
print(request.headers['USER_AGENT'])可以看下列执行结果,已经可以看到不一样的user-agent
如果需要设置user-agent的使用数量,比如20次更换一次user-agent,可以使用以下程序: 步骤2:在setting.py中设置一下user-agent需要提前设置 自定义Middleware中的类后,需要在settings启用,比如我定义的是Middleware_hh的类。
3)requests模块中设置动态user-agentimport requests
import fake_useragent #需要安装
ua=fake_useragent.FakeUserAgent()#动态uer-agent设置
url='http://ip.cn/'
header_info={'User-Agent':ua.random}
rep=requests.get(url,headers=header_info)
print(rep.text)2、cookies的信息,请参关于自动考登录的博文。
3、关于动态设置代理ip几个步骤:

  • 找免费的代理ip

  • 爬取免费的代理ip,存档(本文介绍两个案例)

  • 验证ip的有效性,保留有效ip

  • 使用有效ip。


步骤1:找一些免费的代理网站,比如:http://www.xicidaili.com/http://www.66ip.cn步骤2:爬取代理网站的免费ip案例3-1 爬取http://www.66ip.cn网站的免费代理ip:可以通过两种方式获得:

  • 直接爬取页面的ip

  • 通过api接口获取ip

程序代码: 方式1: 方式2:
主程序: 案例3-2 爬取http://www.xicidaili.com网站的免费代理ip:
主程序:
步骤3:检验爬取的ip是否有效,案例中的第一个函数checkout_proxy
附:关于“由于目标计算机积极拒绝,无法连接。”的错误设置:刚开始我爬虫设置代理时遇到这个问题,解决方式:浏览器中点击设置------打开代理设置---局域网设置---对于本地地址不使用代理服务(打对勾)4、robots协议:
通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。robots的协议一般存储位置:根目录下,网址/robots.txt。如:

  • 百度的robots协议:https://www.baidu.com/robots.txt。

  • 京东的robots协议:https://www.jd.com/robots.txt

内容案例: 主要包含的参数语法:

  • User-agent:搜索引擎种类

  • Disallow:禁止爬取

  • Allow:允许爬取

  • Sitemap:网站资源地图,告知搜索引擎

  • Crawl-delay:爬取延时

  • Disallow:/      代表禁止爬取所有资源

  • Disallow:/ abc   代表禁止爬取abc及其下的所有资源

  • Disallow:/ abc/   代表禁止爬取abc其下的所有资源,但可以爬取abc

  • Disallow:/ *.png    代表禁止爬取所有png图片

  • Disallow:/ *?*   代表禁止爬取动态url


反爬虫的文章参考:https://www.cnblogs.com/bsdr/p/5151891.html
程序案例:案例3-1:https://pan.baidu.com/s/1Aufwd1e_f6OqMAOJdj4O3A 密码:l54u案例3-2:https://pan.baidu.com/s/1-zt7hqj3HyhcWljTrcUVyQ 密码:0g45



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: