python爬虫学习笔记-requests高级

2023-11-01

  • 简历模板下载拓展

  • import requests
    from lxml import etree
    import os
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
    
    }
    #创建一个新的文件夹
    dirName = 'jianli'
    if not os.path.exists(dirName):
        os.mkdir(dirName)
    
    #通用的url模板
    url = 'https://sc.chinaz.com/jianli/free_%d.html'
    for page in range(1,11):
        if page == 1:
            new_url = 'https://sc.chinaz.com/jianli/free.html'
        else:
            new_url = format(url%page)
        response = requests.get(url=new_url,headers=headers)
        response.encoding = 'utf-8'
        page_text = response.text
        #数据解析:详情页url和简历名称
        tree = etree.HTML(page_text)
        div_list = tree.xpath('//*[@id="container"]/div')
        #局部解析
        for div in div_list:
            detail_url = 'https:'+div.xpath('./a/@href')[0]
            title = div.xpath('./p/a/text()')[0]+'.rar'
            # print(title,detail_url)
            #对详情页的url发起请求,解析出简历的下载地址
            detail_page_text = requests.get(url=detail_url,headers=headers).text
            #数据解析:解析下载地址
            detail_tree = etree.HTML(detail_page_text)
            li_list = detail_tree.xpath('//*[@id="down"]/div[2]/ul/li')
            down_list = [] #存储不同的12个下载地址
            for li in li_list:
                download_link = li.xpath('./a/@href')[0]
                down_list.append(download_link)
            #随机选择一个下载地址进行简历模板的下载
            import random
            #从列表中随机选出一个下载地址
            link = random.choice(down_list)
            #对下载地址进行请求发送,下载简历模板的压缩包
            data = requests.get(url=link,headers=headers).content
            filePath = dirName+'/'+title
            with open(filePath,'wb') as fp:
                fp.write(data)
            print(title,'下载保存成功!')
    

Cookie

  • 什么是cookie?

    • cookie的本质就是一组数据(键值对的形式存在)
    • 是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。
    • 如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问。
      • 典型的案例:网站的免密登录
  • 爬取雪球网中的咨询数据

    • url:https://xueqiu.com/,需求就是爬取热帖内容

    • 经过分析发现帖子的内容是通过ajax动态加载出来的,因此通过抓包工具,定位到ajax请求的数据包,从数据包中提取:

      • url:https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=311519&size=15
      • 请求方式:get
      • 请求参数:拼接在了url后面
    • import requests
      import os
      headers = {
          'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
      }
      url = 'https://xueqiu.com/statuses/hot/listV2.json'
      param = {
          "since_id": "-1",
          "max_id": "311519",
          "size": "15",
      }
      response = requests.get(url=url,headers=headers,params=param)
      data = response.json()
      print(data)
      #发现没有拿到我们想要的数据
      
    • 分析why?

      • 切记:只要爬虫拿不到你想要的数据,唯一的原因是爬虫程序模拟浏览器的力度不够!一般来讲,模拟的力度重点放置在请求头中!
      • 上述案例,只需要在请求头headers中添加cookie即可!
    • 爬虫中cookie的处理方式(两种方式):

      • 手动处理:将抓包工具中的cookie赋值到headers中即可

        • 缺点:
          • 编写麻烦
          • cookie通常都会存在有效时长
          • cookie中可能会存在实时变化的局部数据
      • 自动处理

        • 基于session对象实现自动处理cookie。

          • 1.创建一个空白的session对象。
          • 2.需要使用session对象发起请求,请求的目的是为了捕获cookie
            • 注意:如果session对象在发请求的过程中,服务器端产生了cookie,则cookie会自动存储在session对象中。
          • 3.使用携带cookie的session对象,对目的网址发起请求,就可以实现携带cookie的请求发送,从而获取想要的数据。
        • 注意:session对象至少需要发起两次请求

          • 第一次请求的目的是为了捕获存储cookie到session对象
          • 后次的请求,就是携带cookie发起的请求了
        • import requests
          #1.创建一个空白的session对象
          session = requests.Session()
          
          headers = {
              'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
          }
          main_url = 'https://xueqiu.com/'
          #2.使用session发起的请求,目的是为了捕获到cookie,且将其存储到session对象中
          session.get(url=main_url,headers=headers)
          
          url = 'https://xueqiu.com/statuses/hot/listV2.json'
          param = {
              "since_id": "-1",
              "max_id": "311519",
              "size": "15",
          }
          #3.就是使用携带了cookie的session对象发起的请求(就是携带者cookie发起的请求)
          response = session.get(url=url,headers=headers,params=param)
          data = response.json()
          print(data)
          

代理

  • 什么是代理

    • 代理服务器
  • 代理服务器的作用

    • 就是用来转发请求和响应
  • 在爬虫中为何需要使用代理?

    • 有些时候,需要对网站服务器发起高频的请求,网站的服务器会检测到这样的异常现象,则会讲请求对应机器的ip地址加入黑名单,则该ip再次发起的请求,网站服务器就不在受理,则我们就无法再次爬取该网站的数据。
    • 使用代理后,网站服务器接收到的请求,最终是由代理服务器发起,网站服务器通过请求获取的ip就是代理服务器的ip,并不是我们客户端本身的ip。
  • 代理的匿名度

    • 透明:网站的服务器知道你使用了代理,也知道你的真实ip
    • 匿名:网站服务器知道你使用了代理,但是无法获知你真实的ip
    • 高匿:网站服务器不知道你使用了代理,也不知道你的真实ip(推荐)
  • 代理的类型(重要)

    • http:该类型的代理服务器只可以转发http协议的请求
    • https:可以转发https协议的请求
  • 如何获取代理?

    • 代理精灵:http://http.zhiliandaili.cn/
    • 芝麻代理:https://jahttp.zhimaruanjian.com/(推荐,有新人福利)
  • 如何使用代理?

    • 测试:访问如下网址,返回自己本机ip

    • import requests
      from lxml import etree
      headers = {
          'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
      }
      url = 'https://www.sogou.com/web?query=ip'
      page_text = requests.get(url=url,headers=headers).text
      tree = etree.HTML(page_text)
      data = tree.xpath('//*[@id="ipsearchresult"]/strong/text()')[0]
      print(data)
      
    • 使用代理发起请求,查看是否可以返回代理服务器的ip

    • import requests
      from lxml import etree
      headers = {
          'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
      }
      url = 'https://www.sogou.com/web?query=ip'
      #使用代理服务器发起请求
      #proxies={'代理类型':'ip:port'}
      page_text = requests.get(url=url,headers=headers,proxies={'https':'42.57.150.150:4278'}).text
      tree = etree.HTML(page_text)
      data = tree.xpath('//*[@id="ipsearchresult"]/strong/text()')[0]
      print(data)
      
    • 深度测试:

      • 对快代理进行n次请求,直到本机无法访问快代理为止(证明本机ip被快代理封掉了)

      • 构建一个代理池(封装了很多代理ip和端口的容器),用于数据的批量爬取

      • from bs4 import BeautifulSoup
        from lxml import etree
        import requests
        import time
        import random
        headers = {
            'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
        }
        #构建一个代理池
        proxy_url = 'http://webapi.http.zhimacangku.com/getip?num=15&type=2&pro=&city=0&yys=0&port=1&pack=213751&ts=0&ys=0&cs=0&lb=6&sb=-&pb=4&mr=1&regions='
        json_data = requests.get(url=proxy_url,headers=headers).json()
        json_list = json_data['data']
        proxy_list = [] #代理池,每次请求,可以随机从代理池中选择一个代理来用
        for dic in json_list:
            ip = dic['ip']
            port = dic['port']
            n_dic = {
                'https':ip+':'+str(port) # {'https':'111.1.1.1:1234'}
            }
            proxy_list.append(n_dic)
        
        #爬取多页
        #1.创建一个通用的url(可以变换成任意页码的url)
        url = 'https://www.kuaidaili.com/free/inha/%d/'
        #2.通过循环以此生成不同页码的url
        for page in range(1,4):
            print('----------正在爬取第%d页的数据!-----------'%page)
            #format用来格式化字符串的(不可以修改url这个字符串本身)
            new_url = format(url%page)
            #循环发送每一页的请求
            #注意:get方法是一个阻塞方法!
            page_text = requests.get(url=new_url,headers=headers,proxies=random.choice(proxy_list)).text
            time.sleep(1)
            soup = BeautifulSoup(page_text,'lxml')
            trs = soup.select('tbody > tr')
            for tr in trs:
                t1 = tr.findAll('td')[0]
                t2 = tr.findAll('td')[1]
                ip = t1.string
                port = t2.string
                print(ip,port)
        

验证码

  • 图鉴平台:http://www.ttshitu.com/ (推荐)

  • 超级鹰:https://www.chaojiying.com/about.html

  • 使用图鉴识别古诗文网登录中的验证码

    • 古诗文网:https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

    • 使用流程:

      • 注册登录图鉴平台

      • 登录后,点击开发文档,提取识别的源代码

      • 模块(tujian.py)的封装:

      • import base64
        import json
        import requests
        # 一、图片文字类型(默认 3 数英混合):
        # 1 : 纯数字
        # 1001:纯数字2
        # 2 : 纯英文
        # 1002:纯英文2
        # 3 : 数英混合
        # 1003:数英混合2
        #  4 : 闪动GIF
        # 7 : 无感学习(独家)
        # 11 : 计算题
        # 1005:  快速计算题
        # 16 : 汉字
        # 32 : 通用文字识别(证件、单据)
        # 66:  问答题
        # 49 :recaptcha图片识别
        # 二、图片旋转角度类型:
        # 29 :  旋转类型
        #
        # 三、图片坐标点选类型:
        # 19 :  1个坐标
        # 20 :  3个坐标
        # 21 :  3 ~ 5个坐标
        # 22 :  5 ~ 8个坐标
        # 27 :  1 ~ 4个坐标
        # 48 : 轨迹类型
        #
        # 四、缺口识别
        # 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
        # 33 : 单缺口识别(返回X轴坐标 只需要1张图)
        # 五、拼图识别
        # 53:拼图识别
        #函数实现忽略
        def base64_api(uname, pwd, img, typeid):
            with open(img, 'rb') as f:
                base64_data = base64.b64encode(f.read())
                b64 = base64_data.decode()
            data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
            result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
            if result['success']:
                return result["data"]["result"]
            else:
                return result["message"]
            return ""
        
        
        def getImgCodeText(imgPath,imgType):#直接返回验证码内容
            #imgPath:验证码图片地址
            #imgType:验证码图片类型
            result = base64_api(uname='bb328410948', pwd='bb328410948', img=imgPath, typeid=imgType)
            return result
        
        
        
      • 验证码图片识别操作

      • from lxml import etree
        import requests
        import tujian
        headers = {
            'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
        }
        #将验证码图片请求后保存到本地
        login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
        page_text = requests.get(url=login_url,headers=headers).text
        tree = etree.HTML(page_text)
        img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
        code_data = requests.get(url=img_src,headers=headers).content
        with open('./code.jpg','wb') as fp:
            fp.write(code_data)
        
        #识别验证码图片内容
        result = tujian.getImgCodeText('./code.jpg',3)
        print(result)
        

模拟登录

  • 古诗文网

  • 在抓包工具里定位点击登录按钮后对应的数据包:

    • 只要数据包的请求参数中包含用户名,密码和验证码则该数据包就是我们要定位的

    • 首次模拟登录操作:

    • from lxml import etree
      import requests
      import tujian
      headers = {
          'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
      }
      #将验证码图片请求后保存到本地
      login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
      page_text = requests.get(url=login_url,headers=headers).text
      tree = etree.HTML(page_text)
      img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
      code_data = requests.get(url=img_src,headers=headers).content
      with open('./code.jpg','wb') as fp:
          fp.write(code_data)
      
      #识别验证码图片内容
      result = tujian.getImgCodeText('./code.jpg',3)
      print(result)
      #模拟登录
      url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
      data = {
          "__VIEWSTATE": "opfVI7oolwkr7MLRVzsNSMASqLRUuO1dg5ZP5EIRa4FyM+mOYKEs6KWEKQKaba2ulLoZQIaLFiKK4mr5K3ci1v8ua28wtcRtabKWjOtJtU/i2etH+zSduegTMcg=",
          "__VIEWSTATEGENERATOR": "C93BE1AE",
          "from": "http://so.gushiwen.cn/user/collect.aspx",
          "email": "15027900535",
          "pwd": "bobo@15027900535",
          "code":result ,
          "denglu": "登录"
      }
      #获取了登录成功后的页面源码数据
      login_page_text = requests.post(url=url,headers=headers,data=data).text
      with open('wushiwen.html','w') as fp:
          fp.write(login_page_text)
      
    • 查看gushiwen.html发现,没有登录成功,原因:

      • 验证码不对(否定)

      • 没有携带cookie

      • 出现了动态变化的请求参数

        • 如何获取动态变化的请求参数
          • 基于抓包工具进行全局搜索,发现该参数值被隐藏在了登录页面的页面源码中
      • from lxml import etree
        import requests
        import tujian
        headers = {
            'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
        }
        #创建session对象
        session = requests.Session()
        
        #将验证码图片请求后保存到本地
        login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
        page_text = session.get(url=login_url,headers=headers).text
        tree = etree.HTML(page_text)
        img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
        code_data = session.get(url=img_src,headers=headers).content
        with open('./code.jpg','wb') as fp:
            fp.write(code_data)
        
        #解析出动态变化的请求参数
        __VIEWSTATE = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
        
        #识别验证码图片内容
        result = tujian.getImgCodeText('./code.jpg',3)
        print(result)
        #模拟登录
        url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
        data = {
            "__VIEWSTATE": __VIEWSTATE,
            "__VIEWSTATEGENERATOR": "C93BE1AE",
            "from": "http://so.gushiwen.cn/user/collect.aspx",
            "email": "15027900535",
            "pwd": "bobo@15027900535",
            "code":result ,
            "denglu": "登录"
        }
        #获取了登录成功后的页面源码数据
        login_page_text = session.post(url=url,headers=headers,data=data).text
        with open('wushiwen.html','w') as fp:
            fp.write(login_page_text)
        

防盗链

  • 现在很多网站启用了防盗链反爬,防止服务器上的资源被人恶意盗取。什么是防盗链呢?

    • 以图片为例,访问图片要从他的网站访问才可以,否则直接访问图片地址得不到图片
  • 练习:抓取微博图片,url:http://blog.sina.com.cn/lm/pic/,将页面中某一组系列详情页的图片进行抓取保存,比如三里屯时尚女郎:http://blog.sina.com.cn/s/blog_01ebcb8a0102zi2o.html?tj=1

    • 注意:

      • 1.在解析图片地址的时候,定位src的属性值,返回的内容和开发工具Element中看到的不一样,通过network查看网页源码发现需要解析real_src的值。

      • 2.直接请求real_src请求到的图片不显示,加上Refere请求头即可

        • 哪里找Refere:抓包工具定位到某一张图片数据包,在其requests headers中获取
      • import requests
        from lxml import etree
        headers = {
            'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
            "Referer": "http://blog.sina.com.cn/",
        
        }
        url = 'http://blog.sina.com.cn/s/blog_01ebcb8a0102zi2o.html?tj=1'
        page_text = requests.get(url,headers=headers).text
        tree = etree.HTML(page_text)
        img_src = tree.xpath('//*[@id="sina_keyword_ad_area2"]/div/a/img/@real_src')
        for src in img_src:
            data = requests.get(src,headers=headers).content
            with open('./123.jpg','wb') as fp:
                fp.write(data)
            # break
        

图片懒加载(作业)

  • url:https://sc.chinaz.com/tupian/meinvtupian.html
  • 爬取上述链接中所有的图片数据
  • 图片懒加载:
    • 主要是应用在展示图片的网页中的一种技术,该技术是指当网页刷新后,先加载局部的几张图片数据即可,随着用户滑动滚轮,当图片被显示在浏览器的可视化区域范围的话,在动态将其图片请求加载出来即可。(图片数据是动态加载出来)。
    • 如何实现图片懒加载/动态加载?
      • 使用img标签的伪属性(指的是自定义的一种属性)。在网页中,为了防止图片马上加载出来,则在img标签中可以使用一种伪属性来存储图片的链接,而不是使用真正的src属性值来存储图片链接。(图片链接一旦给了src属性,则图片会被立即加载出来)。只有当图片被滑动到浏览器可视化区域范围的时候,在通过js将img的伪属性修改为真正的src属性,则图片就会被加载出来。
  • 如何爬取图片懒加载的图片数据?
    • 只需要在解析图片的时候,定位伪属性(src2)的属性值即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫学习笔记-requests高级 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何解决使用 Spark 从 S3 重新分区大量数据时从内存中逐出缓存的表分区元数据的问题?

    在尝试从 S3 重新分区数据帧时 我收到一个一般错误 Caused by org apache spark SparkException Job aborted due to stage failure Task 33 in stage 1
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 在Python中按属性获取对象列表中的索引

    我有具有属性 id 的对象列表 我想找到具有特定 id 的对象的索引 我写了这样的东西 index 1 for i in range len my list if my list i id specific id index i break
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐

  • 数据结构基本概念、线性表、顺序表

    一 头文件 head h ifndef HEAD H define HEAD H include
  • 蓝桥杯每日一题(30)单词分析(python)

    Topic 试题 G 单词分析 时间限制 1 0s 内存限制 512 0MB 本题总分 20 分 问题描述 小蓝正在学习一门神奇的语言 这门语言中的单词都是由小写英文字母组成 有些单词很长 远远超过正常英文单词的长度 小蓝学了很长时间也记不
  • 简述前端MVVM框架

    一张图说明 1 一句话总结 vm层 视图模型层 通过接口从后台m层 model层 请求数据 vm层继而和v view层 实现数据的双向绑定 2 mvc和mvvm的关系 c 控制层 被换成了vm viewmodel 层 MVVM是Model
  • TypeScript 总结

    文章目录 TypeScript 总结 概述 运行ts文件 方式一 方式二 基础 声明变量 类型 数组 元组 联合类型 取值限制 枚举类型 any unknown void undefined 类型适配 面向对象 函数 普通函数 箭头函数 可
  • 2.2-base-num-str

    for i in range 9 0 1 for j in range 1 i 1 print f j i str i j ljust 2 end print 1 9 9 2 9 18 3 9 27 4 9 36 5 9 45 6 9 54
  • 网络设备自动化运维工具——ansible入门笔记

    Ansible概述 Ansible是一款自动化运维工具 基于Python开发 集合了众多运维工具 Puppet CFengine Chef SaltStack 的优点 实现了批量系统配置 批量程序部署 批量运行命令等功能 Ansible是基
  • 管理者一定要戒掉这五个毛病,否则迟早被淘汰出局

    在职场中 很多人都想升职加薪 但是不是每个人都有能力当一个好的领导 有的人不断的为之努力 有的好不容易当上了领导 可以结果时间不长反而被辞退 并不是他们不够努力 而是当员工和领导有很大的差别 你的思维要及时调整 如果思维还停留在以前 那么只
  • rsyslog无法发送日志到server端问题定位

    问题描述 网络正常的情况下 代码端中使用openlog无法正常将日志发往syslog服务器 即使使用logger也无法正常发送 环境 ARM设备充当client端 pc虚拟机Ubuntu充当server端 验证方式 通过wireshark抓
  • 基于AF的HTTP

    搬搬砖头而已 iOS 基于AF的HTTP请求类 OKHTTPRequestManager h OKHTTPRequestManager h LL Created by Morris on 2020 9 22 Copyright 2020 L
  • 蓝桥杯训练——最小乘积(基本型)

    试题 算法训练 最小乘积 基本型 资源限制 时间限制 1 0s 内存限制 512 0MB 问题描述 给两组数 各n个 请调整每组数的排列顺序 使得两组数据相同下标元素对应相乘 然后相加的和最小 要求程序输出这个最小值 例如两组数分别为 1
  • Java设计模式——单例模式

    文章目录 为什么要用单例模式 单例模式 饿汉式 DCL 静态内部类 为什么要用单例模式 单例对象 Singleton 是一种常用的设计模式 在Java应用中 单例对象能保证在一个JVM中 该对象只有一个实例存在 这样的模式有几个好处 某些类
  • 大数相加和大数相乘

    1 大数相加 int或者long类型的数据往往满足不了数据容量的要求 这时需要用到数组或者字符串进行操作 考虑到数据的位数并不是一个确定的值 运用string来处理可以简化思维 在进行运算之前 需要明确下面几点要求 1 将两组数据中位数大的
  • vue单页面给页面添加锚点实现锚点跳转

    使用Element scrollIntoView 详情情查看 scrollIntoView 参数 alignToTop可选 一个Boolean值 如果为true 元素的顶端将和其所在滚动区的可视区域的顶端对齐 相应的 scrollIntoV
  • 虚拟专用网拨号出现错误提示:没有设置允许基本路由封装GRE协议数据包通过-原因解决方法

    今天给用户配置虚拟专用网拨号到单位的服务器 操作系统为win10 执行拨号后 提示上面的信息经过百度搜索 发现这个问题和网络运营商有关系 因为你使用的是移动或联通宽带 服务商阻止了虚拟专用网通道 只要换电信宽带就好了 恰巧就是使用了联通的移
  • C语言工资管理系统

    include
  • 03.前后端分离中台框架 zhontai 项目代码生成器的使用

    zhontai 项目 基于 Net7 x Vue 等技术的前后端分离后台权限管理系统 想你所想的开发理念 希望减少工作量 帮助大家实现快速开发 后端地址 https github com zhontai Admin Core 前端地址 ht
  • flutter实现APP版本更新(全局弹窗overlay实现)

    升级说明 Android 应用内更新下载 安装 iOS 跳转到appstore下载安装 注 可以通过热更新技术进行升级 我不会 引用插件 获取当前版本 package info 0 4 3 2 版本内更新 ota update 2 4 1
  • Mac下终端(Terminal)中打开某应用的技巧

    Mac下一般都是点击某一个应用的图标 或者在Alfred中键入应用名称打开该应用 但有时候在终端执行某些代码 此时想打开程序 以上操作都不流畅 所以琢磨能否在终端下直接打开某些程序 比如要 编辑路径下的shell脚本文件 但又不想使用vim
  • 基于Stable Diffusion的AIGC服饰穿搭实践

    本文主要介绍了基于Stable Diffusion技术的虚拟穿搭试衣的研究探索工作 文章展示了使用LoRA ControlNet Inpainting SAM等工具的方法和处理流程 并陈述了部分目前的实践结果 通过阅读这篇文章 读者可以了解
  • python爬虫学习笔记-requests高级

    简历模板下载拓展 import requests from lxml import etree import os headers User Agent Mozilla 5 0 Macintosh Intel Mac OS X 10 15