python爬虫常见反爬措施
1.IP封锁
常见网站反爬虫首先考虑到会不会对用户产生误伤,举个例子,在校园网内,有台机器对网站持续高频繁产生请求,校园网涉及用户过多,但是如果封锁IP那么会对校园中的用户产生误伤,丧失了许多用户量,就拿某宝那么大的公司来说,不到万不得已时,不会对IP进行长时间或者进行封锁。
解决方案:
1.采用修改程序访问频率
可以使用
#引入
impor time
#休息两秒
time.sleep(2)
2.采用IP代理的方式,进行对网站数据量的爬取
#导入requests库,如果使用其他的自行导入
import requests
proxies = {
"http": "http://127.0.0.1:8888",
"https": "http://127.0.0.11:1080",
}
requests.get(url, proxies=proxies)
这样爬取网站就无法判断你是否批量爬取了,当然不是一个IP用一次,要用到失效后再进行更换(土豪随意 23333)
2协议头
绝大多数网站,访问时会判断来源,例如手机用户和电脑用户同样访问QQ空间,但是页面却是不一样的,这个为什么呢?,在写爬虫中网站也判断其来源,爬虫初学者在初学的时候会写出这样的代码
举个栗子
rs= requests.get('http://baidu.com')
print(rs.text)
相信这段代码很多初学者都使用过,百度这种搜索引擎网站页面是不会管是不是爬虫或者是其他的人在访问,再举个栗子
rs=requests.get('http://jianshu.com')
返回状态为 response<404>
这是为什么呢,简书判断不到用户的访问来源,所以会返回一个404错误来告知,你是一个爬虫,拒绝访问。
那么如何解决呢
解决方案:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36}
rs=requests.get('http://jianshu.com')
返回状态为response<200>
这时我们可以愉快地访问了。
3.验证码
当用户请求频率过高的时候,有些网站就会触发验证码验证机制,让你输入各种验证码 常用的举个栗子,12306购票时,客户多次请求网站的查询票的请求,在购买车票的的时候,会显现出验证码,那么12306判断你是否是机器人,
解决方案:
加入打码平台,具体自行百度。
4.需要登录才能获得信息
例如知乎,FaceBook ...等网站需要用户登录之后才能够获取页面中的信息,那么这种防护能非常有效的防止数据大批量的被爬取。
解决方案:
1.小数据量(模拟登录后再去爬取,或者使用cookies 直接进行爬取)
2.申请诸多的账号去养这些号,然后登录,或者获得cookies进行爬取。
5.js图片类的反爬
例如爬虫在爬取网站的时候,会获取主页中的有效信息,但是对于他不需要的,爬虫不进行访问,而在真实用户用浏览器访问的时候会访问到主页上的js和图片资源,那么服务器端,就会判断该用户下是否访问了这些资源来判断是否爬虫。
解决方案:
使用selenium
介绍:Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。
使用这个库即可以达到用户真实访问的目的
下面用百度举个例子
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get('http://www.baidu.com') #打开百度首页
driver.implicitly_wait(20) #智能等待20s
driver.find_element_by_id('kw').send_keys('python') #在输入框中输入python
driver.find_element_by_id('su').click() #点击进行搜索
这样的话
就会浏览器子自动操作,打印源码的命令之类的我会出一个selenium专题来介绍敬请期待。
本文持续更新 如果对你有用请关注一下~ 有问题评论下方说明即可,一般四个小时内回复。