.katex {
display: block;
text-align: center;
white-space: nowrap;
}
.katex-display > .katex > .katex-html {
display: block;
}
.katex-display > .katex > .katex-html > .tag {
position: absolute;
right: 0px;
}
.katex {
font-style: normal;
font-variant: normal;
font-weight: normal;
font-stretch: normal;
font-size: 1.21em;
font-family: KaTeX_Main, "Times New Roman", serif;
line-height: 1.2;
text-indent: 0px;
text-rendering: auto;
}
.katex * {
}
.katex .katex-mathml {
position: absolute;
clip: rect(1px 1px 1px 1px);
padding: 0px;
border: 0px;
height: 1px;
width: 1px;
overflow: hidden;
}
.katex .katex-html {
}
.katex .katex-html > .newline {
display: block;
}
.katex .base {
position: relative;
display: inline-block;
white-space: nowrap;
width: min-content;
}
.katex .strut {
display: inline-block;
}
.katex .textbf {
font-weight: bold;
}
.katex .textit {
font-style: italic;
}
.katex .textrm {
font-family: KaTeX_Main;
}
.katex .textsf {
font-family: KaTeX_SansSerif;
}
.katex .texttt {
font-family: KaTeX_Typewriter;
}
.katex .mathit {
font-family: KaTeX_Math;
font-style: italic;
}
.katex .mathrm {
font-style: normal;
}
.katex .mathbf {
font-family: KaTeX_Main;
font-weight: bold;
}
.katex .boldsymbol {
font-family: KaTeX_Math;
font-weight: bold;
font-style: italic;
}
.katex .amsrm {
font-family: KaTeX_AMS;
}
.katex .mathbb, .katex .textbb {
font-family: KaTeX_AMS;
}
.katex .mathcal {
font-family: KaTeX_Caligraphic;
}
.katex .mathfrak, .katex .textfrak {
font-family: KaTeX_Fraktur;
}
.katex .mathtt {
font-family: KaTeX_Typewriter;
}
.katex .mathscr, .katex .textscr {
font-family: KaTeX_Script;
}
.katex .mathsf, .katex .textsf {
font-family: KaTeX_SansSerif;
}
.katex .mainit {
font-family: KaTeX_Main;
font-style: italic;
}
.katex .mainrm {
font-family: KaTeX_Main;
font-style: normal;
}
.katex .vlist-t {
display: inline-table;
table-layout: fixed;
}
.katex .vlist-r {
display: table-row;
}
.katex .vlist {
display: table-cell;
vertical-align: bottom;
position: relative;
}
.katex .vlist > span {
display: block;
height: 0px;
position: relative;
}
.katex .vlist > span > span {
display: inline-block;
}
.katex .vlist > span > .pstrut {
overflow: hidden;
width: 0px;
}
.katex .vlist-t2 {
margin-right: -2px;
}
.katex .vlist-s {
display: table-cell;
vertical-align: bottom;
font-size: 1px;
width: 2px;
min-width: 2px;
}
.katex .msupsub {
text-align: left;
}
.katex .mfrac > span > span {
text-align: center;
}
.katex .mfrac .frac-line {
display: inline-block;
width: 100%;
border-bottom-style: solid;
}
.katex .mspace {
display: inline-block;
}
.katex .llap, .katex .rlap, .katex .clap {
width: 0px;
position: relative;
}
.katex .llap > .inner, .katex .rlap > .inner, .katex .clap > .inner {
position: absolute;
}
.katex .llap > .fix, .katex .rlap > .fix, .katex .clap > .fix {
display: inline-block;
}
.katex .llap > .inner {
right: 0px;
}
.katex .rlap > .inner, .katex .clap > .inner {
left: 0px;
}
.katex .clap > .inner > span {
margin-left: -50%;
margin-right: 50%;
}
.katex .rule {
display: inline-block;
border: 0px solid;
position: relative;
}
.katex .overline .overline-line, .katex .underline .underline-line, .katex .hline {
display: inline-block;
width: 100%;
border-bottom-style: solid;
}
.katex .hdashline {
display: inline-block;
width: 100%;
border-bottom-style: dashed;
}
.katex .sqrt > .root {
margin-left: 0.277778em;
margin-right: -0.555556em;
}
.katex .sizing, .katex .fontsize-ensurer {
display: inline-block;
}
.katex .sizing.reset-size1.size1, .katex .fontsize-ensurer.reset-size1.size1 {
font-size: 1em;
}
.katex .sizing.reset-size1.size2, .katex .fontsize-ensurer.reset-size1.size2 {
font-size: 1.2em;
}
.katex .sizing.reset-size1.size3, .katex .fontsize-ensurer.reset-size1.size3 {
font-size: 1.4em;
}
.katex .sizing.reset-size1.size4, .katex .fontsize-ensurer.reset-size1.size4 {
font-size: 1.6em;
}
.katex .sizing.reset-size1.size5, .katex .fontsize-ensurer.reset-size1.size5 {
font-size: 1.8em;
}
.katex .sizing.reset-size1.size6, .katex .fontsize-ensurer.reset-size1.size6 {
font-size: 2em;
}
.katex .sizing.reset-size1.size7, .katex .fontsize-ensurer.reset-size1.size7 {
font-size: 2.4em;
}
.katex .sizing.reset-size1.size8, .katex .fontsize-ensurer.reset-size1.size8 {
font-size: 2.88em;
}
.katex .sizing.reset-size1.size9, .katex .fontsize-ensurer.reset-size1.size9 {
font-size: 3.456em;
}
.katex .sizing.reset-size1.size10, .katex .fontsize-ensurer.reset-size1.size10 {
font-size: 4.148em;
}
.katex .sizing.reset-size1.size11, .katex .fontsize-ensurer.reset-size1.size11 {
font-size: 4.976em;
}
.katex .sizing.reset-size2.size1, .katex .fontsize-ensurer.reset-size2.size1 {
font-size: 0.833333em;
}
.katex .sizing.reset-size2.size2, .katex .fontsize-ensurer.reset-size2.size2 {
font-size: 1em;
}
.katex .sizing.reset-size2.size3, .katex .fontsize-ensurer.reset-size2.size3 {
font-size: 1.16667em;
}
.katex .sizing.reset-size2.size4, .katex .fontsize-ensurer.reset-size2.size4 {
font-size: 1.33333em;
}
.katex .sizing.reset-size2.size5, .katex .fontsize-ensurer.reset-size2.size5 {
font-size: 1.5em;
}
.katex .sizing.reset-size2.size6, .katex .fontsize-ensurer.reset-size2.size6 {
font-size: 1.66667em;
}
.katex .sizing.reset-size2.size7, .katex .fontsize-ensurer.reset-size2.size7 {
font-size: 2em;
}
.katex .sizing.reset-size2.size8, .katex .fontsize-ensurer.reset-size2.size8 {
font-size: 2.4em;
}
.katex .sizing.reset-size2.size9, .katex .fontsize-ensurer.reset-size2.size9 {
font-size: 2.88em;
}
.katex .sizing.reset-size2.size10, .katex .fontsize-ensurer.reset-size2.size10 {
font-size: 3.45667em;
}
.katex .sizing.reset-size2.size11, .katex .fontsize-ensurer.reset-size2.size11 {
font-size: 4.14667em;
}
.katex .sizing.reset-size3.size1, .katex .fontsize-ensurer.reset-size3.size1 {
font-size: 0.714286em;
}
.katex .sizing.reset-size3.size2, .katex .fontsize-ensurer.reset-size3.size2 {
font-size: 0.857143em;
}
.katex .sizing.reset-size3.size3, .katex .fontsize-ensurer.reset-size3.size3 {
font-size: 1em;
}
.katex .sizing.reset-size3.size4, .katex .fontsize-ensurer.reset-size3.size4 {
font-size: 1.14286em;
}
.katex .sizing.reset-size3.size5, .katex .fontsize-ensurer.reset-size3.size5 {
font-size: 1.28571em;
}
.katex .sizing.reset-size3.size6, .katex .fontsize-ensurer.reset-size3.size6 {
font-size: 1.42857em;
}
.katex .sizing.reset-size3.size7, .katex .fontsize-ensurer.reset-size3.size7 {
font-size: 1.71429em;
}
.katex .sizing.reset-size3.size8, .katex .fontsize-ensurer.reset-size3.size8 {
font-size: 2.05714em;
}
.katex .sizing.reset-size3.size9, .katex .fontsize-ensurer.reset-size3.size9 {
font-size: 2.46857em;
}
.katex .sizing.reset-size3.size10, .katex .fontsize-ensurer.reset-size3.size10 {
font-size: 2.96286em;
}
.katex .sizing.reset-size3.size11, .katex .fontsize-ensurer.reset-size3.size11 {
font-size: 3.55429em;
}
.katex .sizing.reset-size4.size1, .katex .fontsize-ensurer.reset-size4.size1 {
font-size: 0.625em;
}
.katex .sizing.reset-size4.size2, .katex .fontsize-ensurer.reset-size4.size2 {
font-size: 0.75em;
}
.katex .sizing.reset-size4.size3, .katex .fontsize-ensurer.reset-size4.size3 {
font-size: 0.875em;
}
.katex .sizing.reset-size4.size4, .katex .fontsize-ensurer.reset-size4.size4 {
font-size: 1em;
}
.katex .sizing.reset-size4.size5, .katex .fontsize-ensurer.reset-size4.size5 {
font-size: 1.125em;
}
.katex .sizing.reset-size4.size6, .katex .fontsize-ensurer.reset-size4.size6 {
font-size: 1.25em;
}
.katex .sizing.reset-size4.size7, .katex .fontsize-ensurer.reset-size4.size7 {
font-size: 1.5em;
}
.katex .sizing.reset-size4.size8, .katex .fontsize-ensurer.reset-size4.size8 {
font-size: 1.8em;
}
.katex .sizing.reset-size4.size9, .katex .fontsize-ensurer.reset-size4.size9 {
font-size: 2.16em;
}
.katex .sizing.reset-size4.size10, .katex .fontsize-ensurer.reset-size4.size10 {
font-size: 2.5925em;
}
.katex .sizing.reset-size4.size11, .katex .fontsize-ensurer.reset-size4.size11 {
font-size: 3.11em;
}
.katex .sizing.reset-size5.size1, .katex .fontsize-ensurer.reset-size5.size1 {
font-size: 0.555556em;
}
.katex .sizing.reset-size5.size2, .katex .fontsize-ensurer.reset-size5.size2 {
font-size: 0.666667em;
}
.katex .sizing.reset-size5.size3, .katex .fontsize-ensurer.reset-size5.size3 {
font-size: 0.777778em;
}
.katex .sizing.reset-size5.size4, .katex .fontsize-ensurer.reset-size5.size4 {
font-size: 0.888889em;
}
.katex .sizing.reset-size5.size5, .katex .fontsize-ensurer.reset-size5.size5 {
font-size: 1em;
}
.katex .sizing.reset-size5.size6, .katex .fontsize-ensurer.reset-size5.size6 {
font-size: 1.11111em;
}
.katex .sizing.reset-size5.size7, .katex .fontsize-ensurer.reset-size5.size7 {
font-size: 1.33333em;
}
.katex .sizing.reset-size5.size8, .katex .fontsize-ensurer.reset-size5.size8 {
font-size: 1.6em;
}
.katex .sizing.reset-size5.size9, .katex .fontsize-ensurer.reset-size5.size9 {
font-size: 1.92em;
}
.katex .sizing.reset-size5.size10, .katex .fontsize-ensurer.reset-size5.size10 {
font-size: 2.30444em;
}
.katex .sizing.reset-size5.size11, .katex .fontsize-ensurer.reset-size5.size11 {
font-size: 2.76444em;
}
.katex .sizing.reset-size6.size1, .katex .fontsize-ensurer.reset-size6.size1 {
font-size: 0.5em;
}
.katex .sizing.reset-size6.size2, .katex .fontsize-ensurer.reset-size6.size2 {
font-size: 0.6em;
}
.katex .sizing.reset-size6.size3, .katex .fontsize-ensurer.reset-size6.size3 {
font-size: 0.7em;
}
.katex .sizing.reset-size6.size4, .katex .fontsize-ensurer.reset-size6.size4 {
font-size: 0.8em;
}
.katex .sizing.reset-size6.size5, .katex .fontsize-ensurer.reset-size6.size5 {
font-size: 0.9em;
}
.katex .sizing.reset-size6.size6, .katex .fontsize-ensurer.reset-size6.size6 {
font-size: 1em;
}
.katex .sizing.reset-size6.size7, .katex .fontsize-ensurer.reset-size6.size7 {
font-size: 1.2em;
}
.katex .sizing.reset-size6.size8, .katex .fontsize-ensurer.reset-size6.size8 {
font-size: 1.44em;
}
.katex .sizing.reset-size6.size9, .katex .fontsize-ensurer.reset-size6.size9 {
font-size: 1.728em;
}
.katex .sizing.reset-size6.size10, .katex .fontsize-ensurer.reset-size6.size10 {
font-size: 2.074em;
}
.katex .sizing.reset-size6.size11, .katex .fontsize-ensurer.reset-size6.size11 {
font-size: 2.488em;
}
.katex .sizing.reset-size7.size1, .katex .fontsize-ensurer.reset-size7.size1 {
font-size: 0.416667em;
}
.katex .sizing.reset-size7.size2, .katex .fontsize-ensurer.reset-size7.size2 {
font-size: 0.5em;
}
.katex .sizing.reset-size7.size3, .katex .fontsize-ensurer.reset-size7.size3 {
font-size: 0.583333em;
}
.katex .sizing.reset-size7.size4, .katex .fontsize-ensurer.reset-size7.size4 {
font-size: 0.666667em;
}
.katex .sizing.reset-size7.size5, .katex .fontsize-ensurer.reset-size7.size5 {
font-size: 0.75em;
}
.katex .sizing.reset-size7.size6, .katex .fontsize-ensurer.reset-size7.size6 {
font-size: 0.833333em;
}
.katex .sizing.reset-size7.size7, .katex .fontsize-ensurer.reset-size7.size7 {
font-size: 1em;
}
.katex .sizing.reset-size7.size8, .katex .fontsize-ensurer.reset-size7.size8 {
font-size: 1.2em;
}
.katex .sizing.reset-size7.size9, .katex .fontsize-ensurer.reset-size7.size9 {
font-size: 1.44em;
}
.katex .sizing.reset-size7.size10, .katex .fontsize-ensurer.reset-size7.size10 {
font-size: 1.72833em;
}
.katex .sizing.reset-size7.size11, .katex .fontsize-ensurer.reset-size7.size11 {
font-size: 2.07333em;
}
.katex .sizing.reset-size8.size1, .katex .fontsize-ensurer.reset-size8.size1 {
font-size: 0.347222em;
}
.katex .sizing.reset-size8.size2, .katex .fontsize-ensurer.reset-size8.size2 {
font-size: 0.416667em;
}
.katex .sizing.reset-size8.size3, .katex .fontsize-ensurer.reset-size8.size3 {
font-size: 0.486111em;
}
.katex .sizing.reset-size8.size4, .katex .fontsize-ensurer.reset-size8.size4 {
font-size: 0.555556em;
}
.katex .sizing.reset-size8.size5, .katex .fontsize-ensurer.reset-size8.size5 {
font-size: 0.625em;
}
.katex .sizing.reset-size8.size6, .katex .fontsize-ensurer.reset-size8.size6 {
font-size: 0.694444em;
}
.katex .sizing.reset-size8.size7, .katex .fontsize-ensurer.reset-size8.size7 {
font-size: 0.833333em;
}
.katex .sizing.reset-size8.size8, .katex .fontsize-ensurer.reset-size8.size8 {
font-size: 1em;
}
.katex .sizing.reset-size8.size9, .katex .fontsize-ensurer.reset-size8.size9 {
font-size: 1.2em;
}
.katex .sizing.reset-size8.size10, .katex .fontsize-ensurer.reset-size8.size10 {
font-size: 1.44028em;
}
.katex .sizing.reset-size8.size11, .katex .fontsize-ensurer.reset-size8.size11 {
font-size: 1.72778em;
}
.katex .sizing.reset-size9.size1, .katex .fontsize-ensurer.reset-size9.size1 {
font-size: 0.289352em;
}
.katex .sizing.reset-size9.size2, .katex .fontsize-ensurer.reset-size9.size2 {
font-size: 0.347222em;
}
.katex .sizing.reset-size9.size3, .katex .fontsize-ensurer.reset-size9.size3 {
font-size: 0.405093em;
}
.katex .sizing.reset-size9.size4, .katex .fontsize-ensurer.reset-size9.size4 {
font-size: 0.462963em;
}
.katex .sizing.reset-size9.size5, .katex .fontsize-ensurer.reset-size9.size5 {
font-size: 0.520833em;
}
.katex .sizing.reset-size9.size6, .katex .fontsize-ensurer.reset-size9.size6 {
font-size: 0.578704em;
}
.katex .sizing.reset-size9.size7, .katex .fontsize-ensurer.reset-size9.size7 {
font-size: 0.694444em;
}
.katex .sizing.reset-size9.size8, .katex .fontsize-ensurer.reset-size9.size8 {
font-size: 0.833333em;
}
.katex .sizing.reset-size9.size9, .katex .fontsize-ensurer.reset-size9.size9 {
font-size: 1em;
}
.katex .sizing.reset-size9.size10, .katex .fontsize-ensurer.reset-size9.size10 {
font-size: 1.20023em;
}
.katex .sizing.reset-size9.size11, .katex .fontsize-ensurer.reset-size9.size11 {
font-size: 1.43981em;
}
.katex .sizing.reset-size10.size1, .katex .fontsize-ensurer.reset-size10.size1 {
font-size: 0.24108em;
}
.katex .sizing.reset-size10.size2, .katex .fontsize-ensurer.reset-size10.size2 {
font-size: 0.289296em;
}
.katex .sizing.reset-size10.size3, .katex .fontsize-ensurer.reset-size10.size3 {
font-size: 0.337512em;
}
.katex .sizing.reset-size10.size4, .katex .fontsize-ensurer.reset-size10.size4 {
font-size: 0.385728em;
}
.katex .sizing.reset-size10.size5, .katex .fontsize-ensurer.reset-size10.size5 {
font-size: 0.433944em;
}
.katex .sizing.reset-size10.size6, .katex .fontsize-ensurer.reset-size10.size6 {
font-size: 0.48216em;
}
.katex .sizing.reset-size10.size7, .katex .fontsize-ensurer.reset-size10.size7 {
font-size: 0.578592em;
}
.katex .sizing.reset-size10.size8, .katex .fontsize-ensurer.reset-size10.size8 {
font-size: 0.694311em;
}
.katex .sizing.reset-size10.size9, .katex .fontsize-ensurer.reset-size10.size9 {
font-size: 0.833173em;
}
.katex .sizing.reset-size10.size10, .katex .fontsize-ensurer.reset-size10.size10 {
font-size: 1em;
}
.katex .sizing.reset-size10.size11, .katex .fontsize-ensurer.reset-size10.size11 {
font-size: 1.19961em;
}
.katex .sizing.reset-size11.size1, .katex .fontsize-ensurer.reset-size11.size1 {
font-size: 0.200965em;
}
.katex .sizing.reset-size11.size2, .katex .fontsize-ensurer.reset-size11.size2 {
font-size: 0.241158em;
}
.katex .sizing.reset-size11.size3, .katex .fontsize-ensurer.reset-size11.size3 {
font-size: 0.28135em;
}
.katex .sizing.reset-size11.size4, .katex .fontsize-ensurer.reset-size11.size4 {
font-size: 0.321543em;
}
.katex .sizing.reset-size11.size5, .katex .fontsize-ensurer.reset-size11.size5 {
font-size: 0.361736em;
}
.katex .sizing.reset-size11.size6, .katex .fontsize-ensurer.reset-size11.size6 {
font-size: 0.401929em;
}
.katex .sizing.reset-size11.size7, .katex .fontsize-ensurer.reset-size11.size7 {
font-size: 0.482315em;
}
.katex .sizing.reset-size11.size8, .katex .fontsize-ensurer.reset-size11.size8 {
font-size: 0.578778em;
}
.katex .sizing.reset-size11.size9, .katex .fontsize-ensurer.reset-size11.size9 {
font-size: 0.694534em;
}
.katex .sizing.reset-size11.size10, .katex .fontsize-ensurer.reset-size11.size10 {
font-size: 0.833601em;
}
.katex .sizing.reset-size11.size11, .katex .fontsize-ensurer.reset-size11.size11 {
font-size: 1em;
}
.katex .delimsizing.size1 {
font-family: KaTeX_Size1;
}
.katex .delimsizing.size2 {
font-family: KaTeX_Size2;
}
.katex .delimsizing.size3 {
font-family: KaTeX_Size3;
}
.katex .delimsizing.size4 {
font-family: KaTeX_Size4;
}
.katex .delimsizing.mult .delim-size1 > span {
font-family: KaTeX_Size1;
}
.katex .delimsizing.mult .delim-size4 > span {
font-family: KaTeX_Size4;
}
.katex .nulldelimiter {
display: inline-block;
width: 0.12em;
}
.katex .delimcenter {
position: relative;
}
.katex .op-symbol {
position: relative;
}
.katex .op-symbol.small-op {
font-family: KaTeX_Size1;
}
.katex .op-symbol.large-op {
font-family: KaTeX_Size2;
}
.katex .op-limits > .vlist-t {
text-align: center;
}
.katex .accent > .vlist-t {
text-align: center;
}
.katex .accent .accent-body:not(.accent-full) {
width: 0px;
}
.katex .accent .accent-body {
position: relative;
}
.katex .overlay {
display: block;
}
.katex .mtable .vertical-separator {
display: inline-block;
margin: 0px -0.025em;
border-right: 0.05em solid;
}
.katex .mtable .vs-dashed {
border-right: 0.05em dashed;
}
.katex .mtable .arraycolsep {
display: inline-block;
}
.katex .mtable .col-align-c > .vlist-t {
text-align: center;
}
.katex .mtable .col-align-l > .vlist-t {
text-align: left;
}
.katex .mtable .col-align-r > .vlist-t {
text-align: right;
}
.katex .svg-align {
text-align: left;
}
.katex svg, .screenShotTempCanvas {
display: block;
position: absolute;
width: 100%;
height: inherit;
fill: currentcolor;
stroke: currentcolor;
fill-rule: nonzero;
fill-opacity: 1;
stroke-width: 1;
stroke-linecap: butt;
stroke-linejoin: miter;
stroke-miterlimit: 4;
stroke-dasharray: none;
stroke-dashoffset: 0;
stroke-opacity: 1;
}
.katex svg path {
stroke: none;
}
.katex .stretchy {
width: 100%;
display: block;
position: relative;
overflow: hidden;
}
.katex .stretchy::before, .katex .stretchy::after {
content: "";
}
.katex .hide-tail {
width: 100%;
position: relative;
overflow: hidden;
}
.katex .halfarrow-left {
position: absolute;
left: 0px;
width: 50.2%;
overflow: hidden;
}
.katex .halfarrow-right {
position: absolute;
right: 0px;
width: 50.2%;
overflow: hidden;
}
.katex .brace-left {
position: absolute;
left: 0px;
width: 25.1%;
overflow: hidden;
}
.katex .brace-center {
position: absolute;
left: 25%;
width: 50%;
overflow: hidden;
}
.katex .brace-right {
position: absolute;
right: 0px;
width: 25.1%;
overflow: hidden;
}
.katex .x-arrow-pad {
padding: 0px 0.5em;
}
.katex .x-arrow, .katex .mover, .katex .munder {
text-align: center;
}
.katex .boxpad {
padding: 0px 0.3em;
}
.katex .fbox {
box-sizing: border-box;
border: 0.04em solid black;
}
.katex .fcolorbox {
box-sizing: border-box;
border: 0.04em solid;
}
.katex .cancel-pad {
padding: 0px 0.2em;
}
.katex .cancel-lap {
margin-left: -0.2em;
margin-right: -0.2em;
}
.katex .sout {
border-bottom-style: solid;
border-bottom-width: 0.08em;
}
.output_wrapper .hljs {
color: rgb(169, 183, 198);
background: rgb(40, 43, 46);
display: block;
overflow-x: auto;
padding: 0.5em;
}
.output_wrapper .hljs-params {
color: rgb(255, 152, 35);
}
.output_wrapper .hljs-number, .output_wrapper .hljs-literal, .output_wrapper .hljs-symbol, .output_wrapper .hljs-bullet {
color: rgb(174, 135, 250);
}
.output_wrapper .hljs-function, .output_wrapper .hljs-built_in, .output_wrapper .hljs-name, .output_wrapper .hljs-keyword, .output_wrapper .hljs-selector-tag, .output_wrapper .hljs-deletion {
color: rgb(248, 35, 117);
}
.output_wrapper .hljs-variable, .output_wrapper .hljs-template-variable, .output_wrapper .hljs-link {
color: rgb(98, 151, 85);
}
.output_wrapper .hljs-comment, .output_wrapper .hljs-quote {
color: rgb(128, 128, 128);
}
.output_wrapper .hljs-meta {
color: rgb(91, 218, 237);
}
.output_wrapper .hljs-string, .output_wrapper .hljs-attribute, .output_wrapper .hljs-addition {
color: rgb(238, 220, 112);
}
.output_wrapper .hljs-attr, .output_wrapper .hljs-section, .output_wrapper .hljs-title, .output_wrapper .hljs-type {
color: rgb(165, 218, 45);
}
.output_wrapper .hljs-selector-class {
color: rgb(165, 218, 45);
}
.output_wrapper .hljs-emphasis {
font-style: italic;
}
.output_wrapper .hljs-strong {
font-weight: bold;
}
.output_wrapper pre code {
line-height: 18px;
font-size: 14px;
font-weight: normal;
word-spacing: 0px;
letter-spacing: 0px;
}
.output_wrapper {
font-size: 16px;
color: rgb(62, 62, 62);
line-height: 1.6;
word-spacing: 0px;
letter-spacing: 0px;
font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;
}
.output_wrapper * {
font-size: inherit;
color: inherit;
line-height: inherit;
margin: 0px;
padding: 0px;
}
.output_wrapper p {
margin: 1.5em 0px;
}
.output_wrapper h1, .output_wrapper h2, .output_wrapper h3, .output_wrapper h4, .output_wrapper h5, .output_wrapper h6 {
margin: 1.5em 0px;
font-weight: bold;
}
.output_wrapper h1 {
font-size: 1.6em;
}
.output_wrapper h2 {
font-size: 1.4em;
}
.output_wrapper h3 {
font-size: 1.3em;
}
.output_wrapper h4 {
font-size: 1.2em;
}
.output_wrapper h5 {
font-size: 1em;
}
.output_wrapper h6 {
font-size: 1em;
}
.output_wrapper h3 {
margin-bottom: 2em;
margin-right: 5px;
padding: 8px 15px;
letter-spacing: 2px;
background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));
background-color: rgb(63, 81, 181);
color: rgb(255, 255, 255);
border-left: 10px solid rgb(51, 51, 51);
border-radius: 5px;
text-shadow: rgb(102, 102, 102) 1px 1px 1px;
box-shadow: rgb(102, 102, 102) 1px 1px 2px;
}
.output_wrapper ul, .output_wrapper ol {
padding-left: 32px;
}
.output_wrapper ul {
list-style-type: disc;
}
.output_wrapper ol {
list-style-type: decimal;
}
.output_wrapper li * {
}
.output_wrapper li {
margin-bottom: 0.5em;
}
.output_wrapper .code_size_default {
line-height: 18px;
font-size: 14px;
font-weight: normal;
word-spacing: 0px;
letter-spacing: 0px;
}
.output_wrapper .code_size_tight {
line-height: 15px;
font-size: 11px;
font-weight: normal;
word-spacing: -3px;
letter-spacing: 0px;
}
.output_wrapper pre code {
font-family: Consolas, Inconsolata, Courier, monospace;
border-radius: 0px;
}
.output_wrapper blockquote {
display: block;
padding: 15px 15px 15px 1rem;
font-size: 0.9em;
margin: 1em 0px;
color: rgb(129, 145, 152);
border-left: 6px solid rgb(220, 230, 240);
background: rgb(242, 247, 251);
overflow: auto;
word-wrap: normal;
word-break: normal;
}
.output_wrapper blockquote p {
margin: 0px;
}
.output_wrapper a {
text-decoration: none;
color: rgb(30, 107, 184);
word-wrap: break-word;
}
.output_wrapper strong {
font-weight: bold;
}
.output_wrapper em {
font-style: italic;
}
.output_wrapper del {
font-style: italic;
}
.output_wrapper strong em {
font-weight: bold;
}
.output_wrapper hr {
height: 1px;
margin: 1.5rem 0px;
border-right: none;
border-bottom: none;
border-left: none;
border-image: initial;
border-top: 1px dashed rgb(165, 165, 165);
}
.output_wrapper code {
word-wrap: break-word;
padding: 2px 4px;
border-radius: 4px;
margin: 0px 2px;
color: rgb(233, 105, 0);
background: rgb(248, 248, 248);
}
.output_wrapper img {
display: block;
margin: 0px auto;
max-width: 100%;
}
.output_wrapper figcaption {
margin-top: 10px;
text-align: center;
color: rgb(153, 153, 153);
font-size: 0.7em;
}
.output_wrapper table {
display: table;
width: 100%;
text-align: left;
}
.output_wrapper tbody {
border: 0px;
}
.output_wrapper table tr {
border-width: 1px 0px 0px;
border-right-style: initial;
border-bottom-style: initial;
border-left-style: initial;
border-right-color: initial;
border-bottom-color: initial;
border-left-color: initial;
border-image: initial;
border-top-style: solid;
border-top-color: rgb(204, 204, 204);
background-color: white;
}
.output_wrapper table tr th, .output_wrapper table tr td {
font-size: 1em;
border: 1px solid rgb(204, 204, 204);
padding: 0.5em 1em;
text-align: left;
}
.output_wrapper table tr th {
font-weight: bold;
background-color: rgb(240, 240, 240);
}
.output_wrapper .katex-display {
font-size: 1.22em;
}
.output_wrapper .katex {
padding: 8px 3px;
}
.output_wrapper .katex-display > .katex {
display: inline-block;
text-align: center;
padding: 3px;
}
.output_wrapper .katex img {
display: inline-block;
vertical-align: middle;
}
.output_wrapper a[href^="#"] sup {
vertical-align: super;
margin: 0px 2px;
padding: 1px 3px;
color: rgb(255, 255, 255);
background: rgb(102, 102, 102);
font-size: 0.7em;
}
.output_wrapper .task-list-list {
list-style-type: none;
}
.output_wrapper .task-list-list.checked {
color: rgb(62, 62, 62);
}
.output_wrapper .task-list-list.uncheck {
color: rgb(191, 193, 191);
}
.output_wrapper .task-list-list .icon_uncheck, .output_wrapper .task-list-list .icon_check {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
}
.output_wrapper .task-list-list .icon_check::before {
content: "√";
border: 2px solid rgb(62, 62, 62);
color: red;
}
.output_wrapper .task-list-list .icon_uncheck::before {
content: "x";
border: 2px solid rgb(191, 193, 191);
color: rgb(191, 193, 191);
}
.output_wrapper .task-list-list .icon_check::before, .output_wrapper .task-list-list .icon_uncheck::before {
padding: 2px 8px 2px 5px;
border-radius: 5px;
}
.output_wrapper .toc {
margin-left: 25px;
}
.output_wrapper .toc_item {
display: block;
}
.output_wrapper .toc_left {
margin-left: 25px;
}
-->
导入相关包
import timeimport pydashimport base64import requestsfrom lxml import etreefrom aip import AipFacefrom pathlib import Path
百度云 人脸检测 申请信息
#唯一必须填的信息就这三行APP_ID = "xxxxxxxx"API_KEY = "xxxxxxxxxxxxxxxx"SECRET_KEY = "xxxxxxxxxxxxxxxx"# 过滤颜值阈值,存储空间大的请随意BEAUTY_THRESHOLD = 55
AUTHORIZATION = "oauth c3cef7c66a1843f8b3a9e6a1e3160e20"# 如果权限错误,浏览器中打开知乎,在开发者工具复制一个,无需登录# 建议最好换一个,因为不知道知乎的反爬虫策略,如果太多人用同一个,可能会影响程序运行
以下皆无需改动
# 每次请求知乎的讨论列表长度,不建议设定太长,注意节操LIMIT = 5# 这是话题『美女』的 ID,其是『颜值』(20013528)的父话题SOURCE = "19552207"
爬虫假装下正常浏览器请求
USER_AGENT = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3"REFERER = "https://www.zhihu.com/topic/%s/newest" % SOURCE# 某话题下讨论列表请求 urlBASE_URL = "https://www.zhihu.com/api/v4/topics/%s/feeds/timeline_activity"# 初始请求 url 附带的请求参数URL_QUERY = "?include=data%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Danswer%29%5D.target.content%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%3Bdata%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Danswer%29%5D.target.is_normal%2Ccomment_count%2Cvoteup_count%2Ccontent%2Crelevant_info%2Cexcerpt.author.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Darticle%29%5D.target.content%2Cvoteup_count%2Ccomment_count%2Cvoting%2Cauthor.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Dpeople%29%5D.target.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Danswer%29%5D.target.content%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%3Bdata%5B%3F%28target.type%3Danswer%29%5D.target.author.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Darticle%29%5D.target.content%2Cauthor.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Dquestion%29%5D.target.comment_count&limit=" + str( LIMIT)
HEADERS = { "User-Agent": USER_AGENT, "Referer": REFERER, "authorization": AUTHORIZATION}
指定 url,获取对应原始内容 / 图片
def fetch_image(url): try: response = requests.get(url, headers=HEADERS) except Exception as e: raise e return response.content
指定 url,获取对应 JSON 返回 / 话题列表
def fetch_activities(url): try: response = requests.get(url, headers=HEADERS) except Exception as e: raise e return response.json()
处理返回的话题列表
def parser_activities(datums, face_detective): for data in datums["data"]: target = data["target"] if "content" not in target or "question" not in target or "author" not in target: continue html = etree.HTML(target["content"]) seq = 0 title = target["question"]["title"] author = target["author"]["name"] images = html.xpath("//img/@src") for image in images: if not image.startswith("http"): continue image_data = fetch_image(image) score = face_detective(image_data) if not score: continue name = "{}--{}--{}--{}.jpg".format(score, author, title, seq) seq = seq + 1 path = Path(__file__).parent.joinpath("image").joinpath(name) try: f = open(path, "wb") f.write(image_data) f.flush() f.close() print(path) time.sleep(2) except Exception as e: continue
if not datums["paging"]["is_end"]: return datums["paging"]["next"] else: return None
初始化颜值检测工具
def init_detective(app_id, api_key, secret_key): client = AipFace(app_id, api_key, secret_key) options = {"face_field": "age,gender,beauty,qualities"}
def detective(image): image = str(base64.b64encode(image), "utf-8") response = client.detect(str(image), "BASE64", options) response = response.get("result") if not response: return if (not response) or (response["face_num"] == 0): return face_list = response["face_list"] if pydash.get(face_list, "0.face_probability") < 0.6: return if pydash.get(face_list, "0.beauty") < BEAUTY_THRESHOLD: return if pydash.get(face_list, "0.gender.type") != "female": return score = pydash.get(face_list, "0.beauty") return score
return detective
程序入口
def main(): face_detective = init_detective(APP_ID, API_KEY, SECRET_KEY) url = BASE_URL % SOURCE + URL_QUERY while url is not None: datums = fetch_activities(url) url = parser_activities(datums, face_detective) time.sleep(5)
if __name__ == ‘__main__‘: main()
更多详情请参考文章出处知乎高颜值图片爬取
原文地址:https://www.cnblogs.com/li1992/p/10599398.html