zoukankan      html  css  js  c++  java
  • Spider--补充--Requests--session&cookie

    # session 与 cookie
    
    # 可能大家对session已经比较熟悉了,也大概了解了session的机制和原理,但是我们在做爬虫时如何会运用到session呢,就是接下来要讲到的会话保持。
    # 首先说一下,为什么要进行会话保持的操作?
    # requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该
    # 网站的其他网页都会默认使用该session之前使用的cookie等参数尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的时强制登陆,
    # 有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下怎么办,就需要用到保持会话的功能了,我们可以
    # 只登陆一次,然后保持这种状态去做其他的或者更多的请求。其次,我们该如何使用会话保持?举一个事例来说明一下:
    
    #requests.session():维持会话,可以让我们在跨请求时保存某些参数
     
    import requests
     
    #实例化session
    session = requests.session()
    url = 'https://www.douban.com/accounts/login'
    form_data = {
        'source': 'index_nav',
        'form_email': 'xxx',
        'form_password': 'xxx',
        'captcha-solution': 'stamp',
        'captcha-id': 'b3dssX515MsmNaklBX8uh5Ab:en'}
    #设置请求头
    req_header = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
     
    #使用session发起请求
    response = session.post(url,headers=req_header,data=form_data)
    if response.status_code == 200:
        #访问个人主页:
        url = 'https://www.douban.com/people/175417123/'
        response = session.get(url,headers = req_header)
        if response.status_code == 200:
            with open('douban3.html','w') as file:
                file.write(response.text)
    
                
    
    import requests
    import time
    mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
    x = requests.session()
    requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})
    x.get("http://127.0.0.1:80",cookies = mycookie)
    time.sleep(5)
    #请求以后抓包可以检验一下是不是添加成功
    x.get("http://127.0.0.1:80")
    
    # 这样,通过requests.utils.add_dict_to_cookiejar对session对象设置cookie,之后所有的请求都会自动加上我自定义的cookie内容。
    # 也可以通过requests.utils.cookiejar_from_dict 先生成一个cookiejar对象,到时候再赋值给session.cookies。
    # 貌似还可以使用session.cookies.set()或者update()。
    
    # 另外说一点单独处理cookie字段,处理为字典格式:
    cookie = "SINAGLOBAL=821034395211.0111.1522571861723; wb_cmtLike_1850586643=1; un=tyz950829@sina.com; wb_timefeed_1850586643=1; UOR=,,login.sina.com.cn; wvr=6; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWsNeq71O_sXkkXNnXFHgOW5JpX5KMhUgL.Fo2RSK5f1hqcShe2dJLoI0qLxK-L12qLB-zLxKqL1hnL1K2LxK-LBo5L12qLxKqL1hML1KzLxKnL1K.LB-zLxK-L1K-LBKqt; YF-V5-G0=c99031715427fe982b79bf287ae448f6; ALF=1556795806; SSOLoginState=1525259808; SCF=AqTMLFzIuDI5ZEtJyAEXb31pv1hhUdGUCp2GoKYvOW0LQTInAItM-ENbxHRAnnRUIq_MR9afV8hMc7c-yVn2jI0.; SUB=_2A2537e5wDeRhGedG7lIU-CjKzz-IHXVUm1i4rDV8PUNbmtBeLVrskW9NUT1fPIUQGDKLrepaNzTEZxZHOstjoLOu; SUHB=0IIUWsCH8go6vb; _s_tentry=-; Apache=921830614666.5322.1525261512883; ULV=1525261512916:139:10:27:921830614666.5322.1525261512883:1525239937212; YF-Page-G0=b5853766541bcc934acef7f6116c26d1"
    cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")}
     
    
    # 实例:    
    import requests
    from bs4 import BeautifulSoup
    
    def getPage(url):
        """
        Utilty function used to get a Beautiful Soup object from a given URL
        """
    
        session = requests.Session()   # requests.session():维持会话,可以让我们在跨请求时保存某些参数
    
        headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
                   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}
        try:
            req = session.get(url, headers=headers)
        except requests.exceptions.RequestException:
            return None
        bs = BeautifulSoup(req.text, 'html.parser')
        return bs
    
  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/13207753.html
Copyright © 2011-2022 走看看