爬虫遇到的第一个反爬——拉勾网


无关紧要的内容,可以选择跳过
作为一个24K纯菜鸟,一路上跌跌撞撞踩过不少坑,终于可以动手去爬一下网站练习一下了。于是打算将前程无忧、智联、boss直聘还有拉勾网的数据爬下来。
因为是菜鸟,当然是越简单越好,所以就选择爬它们的m站。当我按照往常一样读取网页的时候,弹出了以下信息:

‘{“status”:false,“msg”:“您操作太频繁,请稍后再访问”,“clientIp”:“222.175.171.6”,“state”:2402}\n’

换了几次代理后,还是输出一样的信息,单纯如我,还真的过了一段时间后再打开。尝试过几次以后,决定问问度娘,才发现这是一种反爬措施。说好的操作太频繁,请稍后再访问原来只是一个忽悠我的借口。。。。


以下是正文
网上说,这个网站是需要用post和cookie来请求,作为一个24K纯菜鸟,真不知道这是从哪里看出来的,希望各位大佬知道的可以指点一下。
忘记了在哪个博客上看到说,拉勾网的cookie是一次性的。所以不能把之前的cookie加进去(难怪我把之前的cookie加进去还是访问不了)。

我这里先通过session访问拉勾的搜索页面,获取到当前访问页面的cookie,然后再将参数post过去。
很容易就可以查到真正的URL是这个:
在这里插入图片描述
post的信息是下面这些:
爬虫遇到的第一个反爬——拉勾网_第1张图片
直接上代码:

def get_page_lagou(pageNo, city='广州', positionName='python', proxy=''):
    header = {
        'Accept': 'application/json',
        'Referer': 'https://m.lagou.com/search.html',
        'User-Agent': 'Mozilla/5.0 (Linux; U; Android 2.3.6; \
                      en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) \
                      Version/4.0 Mobile Safari/533.1'
       		 }
    params={
                'city': city,
                'positionName': positionName,
                'pageNo': pageNo,
                'pageSize': 15
            } 
    
    star_page = 'https://m.lagou.com/search.html'
    post_page = 'https://m.lagou.com/search.json?'
    
    try:
        session = requests.Session()
        session.get(star_page, headers=header,proxies=proxy)
        cookie = session.cookies
        response = session.post(post_page, data=params, headers=header, cookies=cookie, \
                                timeout=5, proxies=proxy)
        dict_text = response.json()['content']['data']['page']['result']
    except requests.exceptions.ConnectionError as e:
        print('Error', e.args)
        return None
    return dict_text

然后输出的结果是这样的:
爬虫遇到的第一个反爬——拉勾网_第2张图片
然后就可以很轻松的将想要的信息提取出来了。

第一次写博客纪念一下遇到的第一个反爬。

你可能感兴趣的:(爬虫)