同学们好,我又滚回来更新了,这一次我们要爬取的目标是BOSS直聘,BOSS直聘可以说是反爬虫一个很好的例子了,主要在于如果你访问他的次数过多,他就会出现验证码,要求你通过验证才能继续看,这样还算可以,但是如果你之后还继续访问过多,那么就会出现以下画面
直接连填写验证码的机会都没有,就是不给你看,这么做可以说是很霸气了,不过对方有招,我们也是不差的,既然对方来封我们的IP了,那么我们就不用这个IP了,换代理IP来爬取,那么我们就开始尝试scrapy+代理IP的强大之处把。
需要注意的点:
1.这一次使用的框架仍然是scrapy,这一次的重点是在中间件中增加代理IP和User-Agent
2.这一次使用的代理IP是豌豆代理,我个人觉得还OK
3.本文用于技术交流,如果侵犯版权立即删除,任何人不能用于商业用途
这里先说一下我们这一次使用的豌豆代理,在获取API这一列,设置大概是这样就可以了,如何点下生成API链接的按钮
这样就可以得到自己豌豆代理服务器返回给你的代理IP了
在链接在网页中打开是这个样子的,我们上面的设置,让他返回了JSON格式,这样方便我们在代码里面使用,这里值得注意的是,上面设置的的时候要的都是HTTP协议的,所有在代码中设置的时候要稍微注意一下,我们需要就是data中的ip和port还有expire_time,ip和port就不用说了,expire_time是告诉你这个代理在这个时间点之后便会过期
那么我们要怎么在代码中使用这个东西呢,不用着急,容我细细道来(顺便一说,豌豆代理里面是自己有python和PHP代码的使用教程的,但我看不是很懂,所以就自己搞了一个)
根据上面这张图的要求,我们需要在请求IP代理那个链接的网页的时候,加上一个Proxy-Authorization的请求头,至于内容是用base64对用户名和密码就行加密,然后我这样做了,但是并没有效果,显示链接失败了,观察了一下,单纯这样子还是不行的,需要在加上cookie,之后就可以查看,还是看不懂你的同学可以看看我写的例子,这里是请求了20个ip
import base64
import requests
import time
import random
import json
def base_code(username, password):
str = '%s:%s' % (username, password)
encodestr = base64.b64encode(str.encode('utf-8'))
return '%s' % encodestr.decode()
def main():
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'cookie':'',#cookie要自己更新一下!!!!!!
'user-agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
}
username = '' #这里填入用户名!!!!!
password = ''# 这里填入密码!!!!!
base = base_code(username, password)
DEFAULT_REQUEST_HEADERS['Proxy-Authorization'] = 'Basic '+base
url = r'https://h.wandouip.com/get/ip-list?pack=%s&num=1&xy=1&type=2&lb=\r\n&mr=1&' % random.randint(100,1000)
response = requests.get(url=url,headers=DEFAULT_R