防爬虫策略

防爬虫策略,第1张

Python爬虫防封杀方法集合

文/mrlevo520

Python2.7IDE

Pycharm5.0.3

序言 在爬取的全过程中免不了产生ip被封和403错误这些,这全是网站安全检测出你是网络爬虫而开展反爬对策,这儿自身汇总下怎样防止。 方法1:设定等待的时间

有些网站的防范措施很可能是因为你提交表格的速度很快,比如保存图片,登录网站,以十个人一条的速度抓取信息内容,而把你当成智能机器人网络爬虫。

一般有两种等待时间,一种是显性基因等待时间(强制停止几秒),另一种是潜伏等待时间(详见详情,如按元素加载必要时间等待)。

1.显性基因的等待时间

import time#导进包time.sleep(3)#设定间隔时间为3秒

并尝试在夜深人静的时候收集数据。记住收藏不必太快,否则网站会非常容易认定你是超自然力量。

2.对这里用到的关键句子进行隐式等待,以wait.until()为例,例如通过以下方式

wait1.until(lambda driver: driver.find_element_by_xpath("//div[@id='link-report']/span"))

上面这句话是要等网页元素加载完毕后再进行下一次实际 *** 作。由于网络爬虫的速度太快,在进行下一次实际 *** 作之前,一些元素没有被彻底加载,导致没有搜索到元素或被网站感觉为智能机器人访问。

实际例子可以用Python在我之前的文章(推广中)详细定制豆瓣影评的类型、排名、抓取、存储。

方法2:改动请求头

用户代理是识别你是智能机器人还是人的计算机浏览器访问的重要环节。比如人们用电脑浏览器访问的user-agent会把这个弄成这样:‘Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,像壁虎一样)Chrome/45.0.2454.101Safari/537.36'

这里以urllib2为例。User-Agent的默认设置是Python-urllib2/2.7,所以需要更改。

import urllib2 req = urllib2.Request(url)#多了下列一这一步罢了req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36') response = urllib2.urlopen(req) 方法3:采用代理ip

当自己的ip被网址屏蔽时,只能用更换代理ip的方法来抓取。所以我建议每次抓取的时候,尽量使用代理。代理无数,不要拿代理去黑教育网站。你懂的0.0废话,扔在代理的完成过程上?

# -*- coding: utf-8 -*- import urllib2 url = "http://www.ip181.com/"proxy_support = urllib2.ProxyHandler({'http':'121.40.108.76'}) #主要参数是一个词典{'种类':'代理ip:服务器端口'} opener = urllib2.build_opener(proxy_support) #订制opener opener.add_handler=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')]#add_handler给再加上掩藏 urllib2.install_opener(opener) response = urllib2.urlopen(url) print response.read().decode('gbk')

这里用的测试网站是http://www.ip181.com,可以检查出你用的是什么ip,只是为了检查你用代理ip是否成功。

应用程序代理ip浏览

从结果可以看出,代理ip是签出来的,是自己加的ip值。这是最后的手段。当自有ip被屏蔽时,使用代理ip进行浏览。代理ip挂了怎么办?然后可以做一个ip池,就是把一堆代理ip放在一起,每次运行的时候从ip池中选择一个代理IP作为浏览IP就可以了!

采用ip池的方法~举例说明

# -*- coding: utf-8 -*- import urllib2 import random ip_list=['119.6.136.122','114.106.77.14'] #应用一组ip启用random涵数来任意应用在其中一个ip url = "http://www.ip181.com/"proxy_support = urllib2.ProxyHandler({'http':random.choice(ip_list)}) #主要参数是一个词典{'种类':'代理ip:服务器端口'} opener = urllib2.build_opener(proxy_support) #订制opener opener.add_handler=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')]#add_handler给再加上掩藏 urllib2.install_opener(opener) response = urllib2.urlopen(url) print response.read().decode('gbk')

Ip池提取ip浏览

用代理ip池的方法,可以看出被测ip是其中一个ip池吧?很简单吧?所以如何设置ip池也很简单。用BS4随机找一个秘密ip地址爬取代理ip,然后清理ip,把可用的ip写入目录,然后就可以生成ip池了。最后,当某个IP无法使用时,会将其从池中移除!Ip池制作,建议参考@七夜-代理ip池的小故事。

方法4:绕开不由此可见元素圈套

自己爬就把所有隐藏的元素都露出来了。请告诉我你是否是一个网络爬虫。这是一个陷阱,为网络爬虫从网站地址。如果发现,立即封IP,所以请在抓取前检查要素!比如这个网址,一个简单的登陆页面,我们可以看到有些元素是验证元素看不到的!(示例摘自python互联网数据收集第12章)

可以看到隐藏的值和描述中无法显示的url。

搜索出陷阱url和不可见的值代码。

from selenium import webdriver#from selenium.webdriver.remote.webelement import WebElementurl = 'http://pythonscraping.com/pages/itsatrap.html'driver = webdriver.PhantomJS(executable_path="phantomjs.exe") driver.get(url) links = driver.find_elements_by_tag_name("a")for link in links:if not link.is_displayed():print "the link "link.get_attribute("href")"is a trap"fields = driver.find_elements_by_tag_name("input")for field in fields:if not field.is_displayed():print "do not change value of "field.get_attribute("name")

结果是

the link http://pythonscraping.com/dontgohereis a trapdo not change value of phonedo not change value of email 方法5:采用分布式系统爬取

根据Python,scrapy和redis的分布式爬虫架构。

分布式系统抓取,针对大中型网络爬虫系统软件,完成如下所示的流程。1.基本的http抓取专用工具,比如scrapy2。防止重复抓取网页,如BloomFilter3。3.维护所有集群设备可以合理共享的分布式系统序列。4.用Scrapy集成分布式系统序列。5.事后解决,提取网页(python-goose),存储(Mongodb)

关于使用Scrapy的例子,请参考这里根据Scrapy抓取Dmoz。

方法6:开展仿真模拟登录

这太过分了。一般用Selenium,可以和Firefox或者PhantomJS这种无头浏览器集成。这部作品中有许多条目。有兴趣的可以点击这个,进行查询,方法,编码,分析,什么都有。

公共图书馆图书全自动续借(下)

Python决定豆瓣影评的类型、排名、抓取和存储(推广中)

根据硒写CSDNblog

PayAttention

1.测试的代理ip只对今天的数据信息合理。如果想自己测试,请选择较新的代理ip。我的ip很可能过一段时间就过时了。

2.在这个阶段,我使用的主要方法是将请求头添加到代理ip。对于用JS写的网站,请求不能捕捉所有的数据信息,所以我用SeleniumPhantomJS/Firefox。

3.先学这么多,自己总结一下,再填。

注:阅读相关网站基本建设方法的文章,请移至网站建设教程频道栏目。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/769605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-02
下一篇 2022-05-02

发表评论

登录后才能评论

评论列表(0条)

保存