精华内容
下载资源
问答
  • scrapy关于登录和cookies的三种方法
    2022-02-14 00:34:51

    有些网站是需要登录才能搞的 ,那么这篇文章记录关于登录和cookies的三种方法
    又是一篇干货满满的文章

    方法一
    通过settings.py
    这里去把网站的cookie写到配置文件,这样就可以加载cookie了

    把这2个配置开启

    COOKIES_ENABLED = False
    
     DEFAULT_REQUEST_HEADERS = {
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
         'Accept-Language': 'en',
         'Cookie': '你的cookie信息'
    }
    

    这样就开启cookie了,就可以了

    方法二

    还是得先登录,从浏览器里把cookie给取出来
    在发送请求的时候,准备好cookie,把cookie组装成字典,重写start_requests方法,把字典传进去就行了

    cookie大概就是这样的结构的,当然要复杂的多,所以从浏览器拿出来了,就做下面的字符串解析就成了

    start_requests就是从蜘蛛那个类继承过来的,然后这里就是重写这个类

    把这个cookie带上,然后丢到下面的parse这个方法

    name=zhangsan;sex=female
    
      def start_requests(self):
            cookie = {}
            str_cookie = '你的cookie信息'
            str_cookie_items_list = str_cookie.split(';')
            for str_cookie_items in str_cookie_items_list:
                str_cookie_kw = str_cookie_items.split('=')
                cookie[str_cookie_kw[0].strip()] = str_cookie_kw[1].strip()
            yield scrapy.Request(
                url=self.start_urls[0],
                method='get',
                callback=self.parse,
                cookies=cookie
            )
            
      def parse(self, response, **kwargs):
          print(response.text)
    

    方法三
    这个就是调登录接口,然后再跳转start_url的页面,scrapy会保持session
    还是要重写spider这个类的start_requests方法

    import scrapy
    
    
    class LoginSpiderSpider(scrapy.Spider):
        name = 'login_spider'
        allowed_domains = ['17k.com']
        start_urls = ['https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919']
    
        def start_requests(self):
            url = 'https://passport.17k.com/ck/user/login' # 登录接口
            username = 'username' # 这个就是登录接口的参数 用户名
            password = 'password' # 这个就是登录接口的参数 密码
    
            yield scrapy.Request(
                url=url,
                method='post', # 接口是post请求
                body=f'loginName={username}&password={password}', 
                callback=self.start_parse,
                """
                在scrapy的返回request这里如果发送post请求,
                那么请求的参数要用body,这里没有data=data这个东西,
                那么用body的话 就得是上面那个样子
                为啥登录后,还得回调到start_parse,不能直接到parse?
                因为登录后,这个response是登录后的用户信息的json,还得从这里再request到parse就可以了
                """
            )
    
        def start_parse(self, response, **kwargs):
            # print(response.json()) # 打印登录成功的请求体
            yield scrapy.Request(
                url=self.start_urls[0],
                method='get',
                callback=self.parse,
            )
    
        def parse(self, response, **kwargs):
            print(response.json())
    

    方法四
    selenium完成登录,拿cookie,每次请求加上cookie,–>中间件
    欲知后事如何,且听下回分解

    更多相关内容
  • Python中requests的会话保持session详解

    千次阅读 2021-11-23 18:10:01
    requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数 ...

    可能大家对session已经比较熟悉了,也大概了解了session的机制和原理,但是我们在做爬虫时如何会运用到session呢,就是接下来要讲到的会话保持。

    首先说一下,为什么要进行会话保持的操作?

    requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数

    尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下怎么办,就需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求。

    实例如下:

    import requests
    
    # 会话
    session = requests.session()
    data ={
       'loginName': xxxxxx,       #改为自己的用户名
       'password': 'xxxxxxxxxx'   #改为自己的登录密码
    }
    # 登录
    url ="https://passport.17k.com/ck/user/login"
    
    restult = session.post(url,data=data)
    
    # print(restult.text)
    # print(restult.cookies)
    
    # 再次请求  拿取书架上的数据
    url2 = "https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919"
    result_data =  session.get(url2)
    print(result_data.json()['data'])

    结果如下:

     如果我们不使用这个,直接去请求数据就会提示:

     这样就看的出来session的会话机制。

    http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制。requests也提供了相应的方法去操纵它们。

    requests中的session对象能够让我们跨http请求保持某些参数,即让同一个session对象发送的请求头携带某个指定的参数。当然,最常见的应用是它可以让cookie保持在后续的一串请求中。

    下面,通过官方文档中的示例来了解如何使用它。

    从结果中我们可以看出,第二次请求已经携带上了第一次请求所设置的cookie,即通过session达到了保持cookie的目的。示例中创建了一个requests.Session()对象,通过该对象来进行http请求操作,该操作基本类似于requests.request()。由于session让请求之间具有了连贯性,那么,就有了跨请求参数和非跨请求参数的区别。即有时我想让所有请求均带有某个参数,而有时我只是想让单独的一条请求带上临时的参数。通过下面的例子来了解如何使用。

    从结果中我们可以得出两条结论:

    • session可以为请求方法提供缺省数据,比如第一次请求中的{'x-test': 'true'}就是缺省数据,此时的缺省数据就是跨请求参数。
    • 方法级别的参数不会被跨请求保持,比如第二次请求时,没有携带headers={'x-test2': 'true'},返回的结果中也没有{'x-test2': 'true'},说明该参数没有在第一次请求后被保持住。
    展开全文
  • Scrapy定向爬虫教程(五)——保持登陆状态

    万次阅读 多人点赞 2016-10-15 12:16:27
    所以本节,我们给爬虫配置cookie,使得爬虫能保持用户已登录的状态,达到获得那些需登录才能访问的页面的目的。由于本节只是单纯的想保持一下登陆状态,所以就不写复杂的获取页面了,还是像本教程的第一部分一样,...

    本节内容

    在访问网站的时候,我们经常遇到有些页面必须用户登录才能访问。这个时候我们之前写的傻傻的爬虫就被ban在门外了。所以本节,我们给爬虫配置cookie,使得爬虫能保持用户已登录的状态,达到获得那些需登录才能访问的页面的目的。

    由于本节只是单纯的想保持一下登陆状态,所以就不写复杂的获取页面了,还是像本教程的第一部分一样,下载个网站主页验证一下就ok了。本节github戳此处

    原理

    一般情况下,网站通过存放在客户端的一个被称作cookie的小文件来存放用户的登陆信息。在浏览器访问网站的时候,会把这个小文件发往服务器,然后服务器根据这个小文件确定你的身份,然后返回给你特定的信息。

    我们要做的就是尽量模拟浏览器的行为,在使用爬虫访问网站时也带上cookie来访问。

    前提

    前提当然是你有个账号了,目前本教程一直使用的论坛心韵论坛是我本人搭建的,已经被各种爬虫发的广告水的不要不要的了,为了本教程,仍然是开放注册并一直开着服。但不保证会一直开着,不过根据本教程的讲解,爬取别的Discuz框架论坛一般是没问题的。扯远了……

    获取cookie

    按照以下步骤操作

    1. 登陆论坛,进入主页
    2. 按F12进入Chrome或Firefox的开发者调试工具,选择Network选项卡
    3. 按F5刷新一下页面
    4. 选择Doc子选项卡
    5. 找到主页的请求和返回情况
    6. 找到Request Headers
    7. 复制出cookie

    如图:
    cookie

    把cookie转化格式

    在scrapy中,设置cookie需要是字典格式的,可是我们从浏览器Copy出来的是字符串格式的,所以我们需要写个小程序来转化一下

    transCookie.py

    # -*- coding: utf-8 -*-
    
    class transCookie:
        def __init__(self, cookie):
            self.cookie = cookie
    
        def stringToDict(self):
            '''
            将从浏览器上Copy来的cookie字符串转化为Scrapy能使用的Dict
            :return:
            '''
            itemDict = {}
            items = self.cookie.split(';')
            for item in items:
                key = item.split('=')[0].replace(' ', '')
                value = item.split('=')[1]
                itemDict[key] = value
            return itemDict
    
    if __name__ == "__main__":
        cookie = "你复制出的cookie"
        trans = transCookie(cookie)
        print trans.stringToDict()

    运行的效果如图

    cookie2

    然后把这个字典复制出来。

    给scrapy配置cookie

    首先把刚才得到的cookie放到settings.py

    settings.py

    # -*- coding: utf-8 -*-
    
    BOT_NAME = 'heartsong'
    
    SPIDER_MODULES = ['heartsong.spiders']
    NEWSPIDER_MODULE = 'heartsong.spiders'
    
    ROBOTSTXT_OBEY = False  # 不遵守Robot协议
    
    # 使用transCookie.py翻译出的Cookie字典
    COOKIE = {'key1': 'value1', 'key2': 'value2'}

    然后编写爬虫文件

    heartsong_spider.py

    # -*- coding: utf-8 -*-
    
    # import scrapy # 可以用这句代替下面三句,但不推荐
    from scrapy.spiders import Spider
    from scrapy import Request
    from scrapy.conf import settings
    
    class HeartsongSpider(Spider):
        name = "heartsong"
        allowed_domains = ["heartsong.top"]  # 允许爬取的域名,非此域名的网页不会爬取
        start_urls = [
            # 主页,此例只下载主页,看是否有登录信息
            "http://www.heartsong.top/forum.php"
        ]
    
        cookie = settings['COOKIE']  # 带着Cookie向网页发请求
    
        # 发送给服务器的http头信息,有的网站需要伪装出浏览器头进行爬取,有的则不需要
        headers = {
            'Connection': 'keep - alive',  # 保持链接状态
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
        }
    
        # 对请求的返回进行处理的配置
        meta = {
            'dont_redirect': True,  # 禁止网页重定向
            'handle_httpstatus_list': [301, 302]  # 对哪些异常返回进行处理
        }
    
        # 爬虫的起点
        def start_requests(self):
            # 带着cookie向网站服务器发请求,表明我们是一个已登录的用户
            yield Request(self.start_urls[0], callback=self.parse, cookies=self.cookie,
                          headers=self.headers, meta=self.meta)
    
        # Request请求的默认回调函数
        def parse(self, response):
            with open("check.html", "wb") as f:
                f.write(response.body)  # 把下载的网页存入文件

    总的来说一句话,就是带着cookie发起Request请求。

    运行之后会将主页保存,我们打开文件查看一下效果

    这里写图片描述

    小结

    本节介绍了cookie的获取方法和如何给scrapy设置cookie,下节我会介绍如果带着登陆状态去回复主题帖。

    展开全文
  • 为了解决这个问题,用于保持HTTP连接状态的Session和Cookies就出现了。 2、session与cookies  session是指从我们打开一个网站开始至我们关闭浏览器一系列的请求过程。比如我们打开淘宝网站,淘宝网站的...

    一、爬虫原理

        我们知道互联网是由大量计算机和网络构成的复杂系统,我们可以将其形象的比喻成一张蜘蛛网。网络的节点是计算机,计算机中储存着大量的数据。爬虫程序就是通过网络去采集指定计算机中数据的工具。一般来说,我们采集的数据大多是网页上的数据,也就是我们平时可以在浏览器软件上浏览互联网上的web,因此爬虫程序的道理也很简单,就是模仿浏览器去获取指定站点的网页,通过机器来看我们需要采集数据的网页,并把我们需要的数据的保存起来。

    1、HTTP原理

        互联网在传输数据的时候需要遵循一定的规范格式,其中我们在使用浏览器浏览网页的时候就需要遵循HTTP协议,中文名称为超文本传输协议。HTTP协议主要用来传输超文本(网页等)数据。类似的协议还有ftp(主要用来传输文件)等
        我们需要采集指定计算机中的数据,那么我们怎么才能找到这台计算机呢? HTTP协议使用URL来定位计算机和计算机中的数据资源。例如https://www.blog.csdn.net/hfutzhouyonghang就是一个URL,在浏览器上输入这串字符,就可以找到我的博客了。https表示协议的名称,httpshttp协议的加密版本。www.blog.csdn.net表示服务器的域名,通过转换可以变成ip地址,可以通过域名在茫茫互联网上定位到csdn的服务器。最后/hfutzhouyonghang该服务器web站点下的资源。

    2、HTTP请求

        我们在浏览器上输入一个URL,按下回车之后很快就看到了页面的内容,这其中包含了很复杂的过程,我们需要了解的是,我们的浏览器向URL指向的服务器发出了http请求request,服务器处理请求之后,返回响应response。浏览器根据response中的源代码等内容进行解析,渲染之后我们就可以在浏览器上看到丰富多彩的内容了。其模型如下:

    这里写图片描述

    2.1 HTTP request

        打开浏览器的检查元素,选择一个请求:

    这里写图片描述

    我们可有看到reques主要t由一下部分组成:

    1. Request URL:即我们的请求地址。
    2. Request Method:常用请求方法有两种,一种是GET方法,其请求的参数会以明文形式加 在URL后面,因此具有一定的长度限制。一种POST方法,POST方法会将请求中的参数(例如,用户名和密码)加密后传到服务器。
    3. Request Header:header是比较重要的一部分,header携带了大量重要的信息,我们在写爬虫程序时要格外注意,其中header包含的部分如下:
      • Accept: 用于浏览器可以接受哪些类型的图片。
      • Accept-Lang:用于指定浏览器可有接受哪些语言。
      • Accept-Encoding:用于指定浏览器可以接受的内容编码。
      • Host:用于指定请求资源的主机IP地址和端口号。
      • Cookie:用于维持用户当前的会话,通常会有多个cookie。
      • Referer:表示请求从那个页面发过来的
      • User-Agent:它为服务器提供当前请求来自的客户端的信息,包括系统类型、浏览器信息等。这个字段内容在爬虫程序种非常重要,我们通常可以使用它来伪装我们的爬虫程序,如果不携带这个字段,服务器可能直接拒绝我们的请求。
      • Content-Type:用来表示具体请求中媒体类型信息,text/html 表示HTML格式,image/gif表示GIF图片,application/json表示json数据等,更过的类型大家可以去百度上搜下。
    4. request body:请求体中放的内容时POST请求的表单数据,GET请求没有请求体。

    2.2、HTTP response

        服务器处理好用户提交的请求后,向用户返回响应,响应主要由一下三个部分组成:

    1. 响应状态码:状态码表示服务器的响应状态,例如200代表服务器正常响应,404表示页面未找到,500表示服务器内部错误等,具体可有在百度上查。
    2. 响应头:响应头包含了服务器对请求的应答信息,常见字段如下:
      • Data:表示产生响应的时间。
      • Last-Modified:表示获得的资源最后的修改时间。
      • Server:包含服务器信息,比如名称、版本号等。
      • Content-Type:表示返回的数据类型是什么。比如text/html 表示返回html文档。
      • Set-Cookie:告诉浏览器下次请求时需要带上该字段中的Cookie,这个非常重要,是服务器识别用户维持会话的重要手段。
      • Expires:指定响应的过期时间,可以是代理服务器或者浏览器将加载的内容更新到缓存中,如果再次访问,就可以从缓存中加载,缩短加载时间。
    3. 响应体:响应体的内容非常重要,如果说响应状态码、响应头是包裹上的快递单信息,那么响应体就是包裹里的东西了。我们需要解析的就是响应体。我们在请求网页时,其响应体就是html代码,请求一张图片时,响应体内容就是图片的二进制数据。

    二、Session和Cookies

        在浏览一些网站,比如购物的时候,我们常常需要先登陆,登陆过后我们可以连续访问网站,并且可以将我们需要的购买的东西加入购物车。但是有时候我们中途过了一段时间没有操作就需要重新登陆。还有某些网站,打开网页之后就已经登陆了。这些功能看起来来很神奇,其实都是Session和Cookie在发挥作用。

    1,无状态HTTP

        Http有个特点,即无状态。什么叫无状态呢。Http无状态是指Http协议对事务处理没有记忆能力,当我们向服务器发送请求后,服务器处理请求之后返回结果。这是一个独立的过程,再次向服务器发出请求,服务器做出响应又是一次独立的过程。不会有一条网线一直连着你的电脑和服务器来完成你的所有请求。因此,服务器并不知道收到的两次请求是否来自同一个用户。这种效果并不是我们想要的。为了保持前后的状态,我们需要将前面所有请求中的数据再重传一次,这是非常麻烦和浪费资源的。为了解决这个问题,用于保持HTTP连接状态的Session和Cookies就出现了。

    2、session与cookies

    这里写图片描述
        session是指从我们打开一个网站开始至我们关闭浏览器一系列的请求过程。比如我们打开淘宝网站,淘宝网站的服务器就会为我们创建并保存一个会话对象,会话对象里有用户的一些信息,比如我们登陆之后,会话中就保存着我们的账号信息。会话有一定的生命周期,当我们长时间(超过会话有效期)没有访问该网站或者关闭浏览器,服务器就会删掉该会话对象。
        cookies是指网站为了辨别用户身份,进行会话跟踪而储存在本地终端的数据,cookies一般再电脑中的文件里以文本形式储存。cookies其实是有键值对组成的,如下图所示:
    这里写图片描述

    3,会话维持

        当客户端浏览器第一次请求服务器时,服务器会再response中设置一个Set-Cookies的字段,用来标记用户的身份,客户端浏览器会把cookies保存起来,cookies中保存的有Session的id信息。当客户端浏览器再次请求该网站时,会把Cookies放在请求头中一起提交给服务器,服务器检查该Cookies即可找到对应的会话是什么,再通过判断会话来辨认用户的状态。
        当我们成功登陆网站时,网站会告诉客户端应该设置哪些Cookies信息,以保持登陆状态。如果客户端浏览器传给服务器的cookies无效或者会话过期,可能就会收到错误的响应或者跳转到登陆页面重新登陆。

    三、代码实现

        我们以登陆豆瓣网为例,来看一下如何处理cookies数据,我们使用了Resquests第三方库。
    1. 首先我们构造一个header,并将header带入请求中。

       import requests
       headers = {'Host': 'www.douban.com',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive'
               }
    res = requests.get("https://www.douban.com/accounts/login",headers=headers)
    
    #查看状态码
    >>>res.status_code
    200
    #查看headers,注意第一次请求豆瓣,响应体中的Set-Cookies字段
    >>>res.headers
    {'Date': 'Sat, 28 Jul 2018 14:47:46 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=30', 'Vary': 'Accept-Encoding', 'X-Xss-Protection': '1; mode=block', 'X-Douban-Mobileapp': '0', 'Expires': 'Sun, 1 Jan 2006 01:00:00 GMT', 'Pragma': 'no-cache', 'Cache-Control': 'must-revalidate, no-cache, private', 'X-Frame-Options': 'SAMEORIGIN', 'Set-Cookie': 'bid=NURXfALBCrM; Expires=Sun, 28-Jul-19 14:47:46 GMT; Domain=.douban.com; Path=/', 'X-DOUBAN-NEWBID': 'NURXfALBCrM', 'X-DAE-Node': 'brand56', 'X-DAE-App': 'accounts', 'Server': 'dae', 'Strict-Transport-Security': 'max-age=15552000;', 'Content-Encoding': 'gzip'}
    #查看cookie,直接获取cookie,将会获取到cookieJar对象,事实上requests中就是用该对象储存cookies的
    >>>res.cookies
    <RequestsCookieJar[Cookie(version=0, name='bid', value='NURXfALBCrM', port=None, port_specified=False, domain='.douban.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1564325266, discard=False, comment=None, comment_url=None, rest={}, rfc2109=False)]>
    
    >>>for cookie in res.cookies:
        print(cookie.name+"\t"+cookie.value)
    bid NURXfALBCrM
    #我们可以将第一次请求的响应中的Set-cookies添加进来,事实上requests库会自动帮我们做这些
    >>>cookieJar = requests.cookies.RequestsCookieJar()
    >>>for cookie in res.cookies:
        cookieJar.set(cookie.name,cookie.value)
    >>>cookieJar
    <RequestsCookieJar[Cookie(version=0, name='bid', value='NURXfALBCrM', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
    
    >>>for cookie in res.headers['Set-Cookie'].split(";"):
        key=cookie.split('=')[0]
        value=cookie.split('=')[1]
        cookieJar.set(key,value)
    #看一下现在cookieJar中内容
    >>>cookieJar
    <RequestsCookieJar[Cookie(version=0, name=' Domain', value='.douban.com', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False), Cookie(version=0, name=' Expires', value='Sun, 28-Jul-19 14:47:46 GMT', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False), Cookie(version=0, name=' Path', value='/', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False), Cookie(version=0, name='bid', value='NURXfALBCrM', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
    
    #模拟登陆
    >>>data = {
        'source':'None',
        'redir':'https://movie.douban.com/',
        'form_email':'*****',
        'form_password':'****'
    }
    
    #使用Session对象提交请求,相当于在浏览器中连续操作网页,而如果直接使用```request.post()```,则相当没提交一次请求,则打开一个浏览器,我们在实际使用浏览器的经验告诉我们,这样是不行的。
    >>>session = requests.Session()
    >>>res =session.post('https://www.douban.com/accounts/login',headers=headers,cookies=cookieJar,data=data)
    >>>res.status_code
    200
    #此时,如果实在浏览器的话,我们应该可以看到已经登陆成功,并且跳转到了https://movie.douban.com/,页面,使用这个Session直接访问的我的账号,检查一下,是否是我的账号在登录状态。
    >>>res = session.get('https://www.douban.com/accounts')
    >>>res.text
    '<!DOCTYPE html>\n<html lang="zh-CN">\n  <head>\n    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n    <meta property="wb:webmaster" content="572c54c2cc00c6fb" />\n    <meta name="referrer" content="always">\n    \n    <title>\n    smart_hang的帐号\n</title>\n 

    我们看到已经成功登陆豆瓣网,并使用Cookie和Session保持登录状态,这样我们就可以更好的采集数据啦!

    展开全文
  • 飞溅开始从每一个干净的状态呈现,因此,如果你想保持会话,你需要先初始化饼干,也使Scrapy意识到在呈现上设置的Cookie。请参阅scrapy-splash自述文件中的Session Handling部分。一个完整的例子看起来是这样的(自述...
  • sessionscrapy实现模拟登录知乎

    千次阅读 2017-07-28 16:00:13
    sessionscrapy 的模拟登陆 推荐我的个人博客: blog.wuzhenyu.com.cn
  • 使用Session的实例对象session保持登陆状态 注意点 1 再次进行get的时候使用session.get 2 不要写错url 地址 示例代码 #coding:utf-8 import requests import re url = 'http://www.renren.com/PLogin.do' ...
  • 二、requests和scrapy保持验证码cookies一致的方法1.requests2.scrapy三、总结 一、为什么要保持验证码cookies的一致性? 众所周知,http是无状态的请求,每一次访问都代表一次新的连接,通俗点讲,如果在登录时...
  • 客户端向服务器发送请求,cookie则是表明我们身份的标志。而“访问登录后才能看到的页面”这一行为,恰恰需要客户端向服务器证明:“我是刚才登录过的那个客户端”。于是就需要cookie来标识客户端的身份,以存储它的...
  • 在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,这时就需要用到保持会话的功能 1、requests.session简单例子 参考源:...
  • Session的英文意思是会话,然后也举一个例子,我上大学的时候,有钱了,办了张理发卡,这个理发卡200元一张,然后20块钱理发一次,当然还有不同价位的。不过这个卡的品质要比跆拳道的记次卡要质量好很多,是一张金卡...
  • --------- Session Session的概念和工作原理:Session是另一种记录客户状态的机制,是一次浏览器和服务器的交互的会话。为了记录Session,在客户端和服务器端都要保存数据,客户端记录一个标记(session_id),服务器...
  • scrapy基本操作 基本介绍:基于异步爬虫的框架。高性能的数据解析,高性能的持久化存储,全站数据爬取,增量式,分布式… 环境的安装: - Linux: pip install scrapy - Windows: a. pip install wheel b. ...
  • 什么是会话技术?http协议是无状态协议。为了满足在多次请求之间数据进行交互,推出了会话技术。会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止。中间可能进行多次的请求...
  • scrapy

    万次阅读 多人点赞 2019-09-02 14:28:08
    Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试. Scrapy主要包括了以下组件: 引擎(Scrapy) ...
  • ScrapyScrapy shell

    2020-06-16 07:30:43
    ScrapyScrapy shell
  • import requests ...data = {"username": "1128", "password": "123", "action": ...session = requests.session() resp = session.post(url, data=data) resp.encoding = 'gbk' # print(resp.text) # 推荐小说 hot_
  • 爬取过程中经常会遇到多个请求需要同一个session(cookies)的操作。 对于requests 库来说,使用较为简单: import requests session = requests.Session() def get_page(url, model): try: data = { ... } ...
  • python网络爬虫之Scrapy

    2021-02-09 12:55:21
    本文分享的大体框架包含以下三部分(1)首先介绍html网页,用来解析html网页的工具xpath(2)介绍python中能够进行网络爬虫的库(requests,lxml,scrapy等)(3)从四个案例出发有易到难依次介绍scrapy集成爬虫框架下面开始...
  • 逆向爬虫17 Scrapy中间件

    千次阅读 2022-02-03 22:16:31
    使用requests.session()会话对象发送post请求模拟登录,无需复制Cookies,会话会记住与服务器通信过程中的参数,无需每次通信时都加上请求头,更方便。 在Scrapy中,同样也可以用这两种方式来解决登录Cookies问题。...
  • scrapy小结

    2018-04-24 02:40:47
    1、讲述下scrapy框架,并阐述工作流程:                         ScrapyEngine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。 Scheduler(调度...
  • 最近有朋友问,如何将selenium的session会话同步给requests,因此写一下selenium与request session会话互相同步。 二:Selenium同步到requests import requests from selenium import webdriver webapi = ...
  • Scrapy

    2018-05-27 19:35:00
    Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy使用了Twisted异步网络库来处理网络通讯...
  • 开发环境:Python 3.6.0 版本 (当前最新)Scrapy 1.3.2 版本 (当前最新)请求和响应Scrapy的Request和Response对象用于爬网网站。通常,Request对象在爬虫程序中生成并传递到系统,直到它们到达下载程序,后者执行请求...
  • scrapy爬虫框架

    2021-02-04 06:07:52
    class QuotesSpider(scrapy.Spider): name = 'quotes' start_urls = [ 'http://quotes.toscrape.com/tag/humor/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'aut
  • Scrapy的中间件

    千次阅读 2018-07-10 14:30:34
    中间件就可以帮你解决这些事下载中间件(Downloader middlewares)Scrapy框架中的中间件主要分两类:蜘蛛中间件和下载中间件。其中最重要的是下载中间件,反爬策略都是部署在下载中间件中的蜘蛛中间件是介入到Scrapy...
  • scrapy手工识别验证码登录超星泛雅

    千次阅读 2020-07-13 00:19:30
    我这两天一直都在学习scrapy如何保持会话状态,在网上找了好多的资料以及博主的文章,做了一点总结。这里,以超星网课登录系统作为例子讲解: 1. 首先肯定是找到登录时需要提交的post表单数据,最快的办法就是查看...
  • 文章目录scrapy学习笔记@[toc]crawlspider的简单用法使用scrapy发送post请求使用scrapy发送post请求时需要注意的问题关于scrapy使用cookie出现的一系列问题正方教务系统的爬取使用requests爬取(十分简单)使用scrapy...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 655
精华内容 262
热门标签
关键字:

scrapy session 会话保持