美文网首页简友广场想法
详解拉勾网访问太频繁的问题——Session自动获取cookie

详解拉勾网访问太频繁的问题——Session自动获取cookie

作者: 刘年 | 来源:发表于2020-03-15 19:00 被阅读0次

    1、问题描述

    用requests打开拉勾网,一般情况下会得到访问太频繁的错误提示。但是实际上是不是呢?只要通过浏览器能打开的那个网页,那么爬虫一般都是可以打开的,所以这其实是一个反爬的问题,最关键就是设置好请求头headers
    这里找动态页面的地址我就叙述了,主要是说如何设置请求头,关键是cookie的问题

    2、思路描述

    前提是找到最终包含你想要数据的动态页面地址
    让我们来看看请求头headers里面有哪些信息?

    headers
    一般情况下,要有User-Agent,然后有Referer,再复杂一点的要有Cookie,如果不嫌麻烦,把这些字段全部复制到请求头里面都行

    其他字段都比较简单,可以复制过去,但是cookie由于字符串比较长,容易出问题,因此这里主要说明如何自动获取cookie

    3、cookie自动获取

    cookie有session自动获取,即我们先以seession的形式打开一个静态网页,然后得到cookie,再将得到的cookie放入请求头中,访问动态页面

    4、代码解析

    import requests
    
    #地址准备
    
    #静态页面地址
    static_url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
    #动态页面地址
    aj_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    
    #设置请求头,复制页面中的请求头即可,设置后格式
    headers ={
        'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
    }
    #传输data数据,用于post动态页面
    data = {
        'first': 'true',
        'pn': 1,
        'kd': 'python',
    }
    
    #建立session,我们用同一个session先后访问静态和动态页面,可以用同一个cookie
    sess =requests.session()
    
    #访问静态页面
    sess.get(static_url,headers =headers)
    #得到cookie
    cookies = sess.cookies
    #再请求动态页面
    resp =sess.post(url =aj_url,headers=headers, data=data,cookies=cookies)
    # resp= sess.post(url=aj_url, headers=headers, data=data, cookies=cookies, timeout=3)
    print(resp.text)
    
    

    贴一个爬取广东省政府采购网的代码

    import requests
    
    #地址准备
    
    #静态页面地址
    static_url = 'http://www.gdgpo.gov.cn'
    #动态页面地址
    aj_url = 'http://www.gdgpo.gov.cn/search.do'
    
    #设置请求头,复制页面中的请求头即可,设置后格式
    headers ={
        'Referer': 'http://www.gdgpo.gov.cn/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
    }
    #传输data数据,用于post动态页面
    data = {
        'keyWord': '空间规划',
        'pageIndex':2,
        'pageSize':10,
        "pointPageIndexId":1,
    }
    
    #建立session,我们用同一个session先后访问静态和动态页面,可以用同一个cookie
    sess =requests.session()
    
    #访问静态页面
    sess.get(static_url,headers =headers)
    #得到cookie
    cookies = sess.cookies
    #再请求动态页面
    resp =sess.post(url =aj_url,headers=headers, data=data,cookies=cookies)
    # resp= sess.post(url=aj_url, headers=headers, data=data, cookies=cookies, timeout=3)
    with open('ss.html','w',encoding='utf-8') as ff:
        ff.write(resp.text)
    

    5、引申——json文件的处理

    上述中得到的数据是一个json格式文件,json可以直接转成dict字典,然后可以非常方便地取出数据。但是往往得到的json字符串缩进不整齐,很难看出层次关系。


    散乱的json数据排列

    这时候,推荐一个网站在线json检校工具,复制进去json形式的字符串,可以帮助整理缩进格式。

    image.png image.png

    可以说是一个很不错的工具。

    相关文章

      网友评论

        本文标题:详解拉勾网访问太频繁的问题——Session自动获取cookie

        本文链接:https://www.haomeiwen.com/subject/mzzrehtx.html