Html рдЪрдкрд▓рддрд╛ рдкреИрдХ - рдПрдХ рдЖрд╕рд╛рди .NET HTML рдкрд╛рд░реНрд╕рд░

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдПрдХ рдмрд╛рд░, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ рд╣рдореНрдмрд░реЗ рдкрд░ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдХреНрдпрд╛ рд╡реЗрддрди рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдЙрдЪреНрдЪ рд╢рд┐рдХреНрд╖рд╛ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╣реИред рдФрд░ рдЕрдм рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдПрдХ рд╕рддреНрд░ (рдореЗрд░рд╛ рд╕рд╣рд┐рдд) рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ рдЕрдкрдиреЗ рддрдВрддреНрд░рд┐рдХрд╛рдУрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдореИрдВ .Net рдкрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдореИрдВрдиреЗ C # рдореЗрдВ рд╣реИрдмрд░ рдкрд░ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ html рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ html рдкрд╛рд░реНрд╕рд░ рдЦреЛрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рдФрд░ рд╕рддреНрд░ рдХреЛ рдФрд░ рдЖрдЧреЗ рд▓реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ :(
рд▓реЗрдХрд┐рди рддрдм рдореИрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА Html Agility Pack рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛

рдкрд╛рд░реНрд╕рд░ рдЪрдпрди


рдореИрдВ Stackoverflow рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЧрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рднреА рд╕рдорд╛рдзрд╛рди рд╕реБрдЭрд╛рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SgmlReader рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреЛ HTML рдХреЛ XmlDocument рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреА рд╣реИ, рдФрд░ XML рдХреЗ рд▓рд┐рдП рдЯреВрд▓реНрд╕ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ .Net рдЯреВрд▓реНрд╕ рдореЗрдВред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕рдиреЗ рдореБрдЭреЗ рд░рд┐рд╢реНрд╡рдд рдирд╣реАрдВ рджреА рдФрд░ рдореИрдВ Html Agility Pack рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдЧрдпрд╛ред

рддреНрд╡рд░рд┐рдд рдЯреВрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдЪрдкрд▓рддрд╛ рдкреИрдХ


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдорджрдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢ рд╣реИред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреАрд╕ рдореБрдЦреНрдп рдХрдХреНрд╖рд╛рдПрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:



рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо DOM рдЗрдВрдЯрд░рдлреЗрд╕ ( рдЯрд┐рдкреНрдкрдгреА k12th ) + рдмрдиреНрд╕: GetElementbyId (), CreateAttribute (), CreateElement (), рдЖрджрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рдирд╛ рдерд╛
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ HTML рдЕрднреА рднреА Xml рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИ, рдФрд░ HtmlDocument рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдЧ рдПрдХ рд░реИрдкрд░ рд╣реИрдВ, рдареАрдХ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

рдкрд░рд╕рд┐рдо рд╣рдмрд░!


рд╣реИрдмреЗ рдкрд░ рдиреМрдХрд░рд┐рдпрд╛рдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд▓рд╛рдЗрдиреЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рд╡реЗрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд░рд┐рдХреНрддрд┐ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рд╡реЗрддрди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдЪрд╛рд╣рд┐рдП:
  1. рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп GetJobLinks ( HtmlDocument html )
  2. {
  3. var trNodes = htmlред GetElementbyId ( "рдиреМрдХрд░реА-рдЖрдЗрдЯрдо" ) ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред рдЬрд╣рд╛рдБ ( x => xред Name == "tr" ) ;
  4. foreach ( trNodes рдореЗрдВ var рдЖрдЗрдЯрдо )
  5. {
  6. var tdNodes = рдЖрдЗрдЯрдоред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред рдЬрд╣рд╛рдБ ( x => xред Name == "td" ) ред ToArray ( ) ;
  7. рдЕрдЧрд░ ( tNNodesред рдЧрд┐рдирддреА ) ( ! = 0 )
  8. {
  9. var рд╕реНрдерд╛рди = tdNodes [ 2 ] ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред рдЬрд╣рд╛рдБ ( x => xред Name == "a" ) ред ToArray ( ) ;
  10. jobListред рдЬреЛрдбрд╝реЗрдВ ( рдирдпрд╛ HabraJob )
  11. {
  12. рдЕрд░реНрд▓ = tdNodes [рдХреЛ реж ] ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред рдкрд╣рд▓рд╛ ( ) ред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ [ "href" ] ред рдореВрд▓реНрдп,
  13. рд╢реАрд░реНрд╖рдХ = tdNodes [рдХреЛ реж ] ред FirstChildред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ,
  14. рдореВрд▓реНрдп = tdNodes [ 1 ] ред FirstChildред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ,
  15. рджреЗрд╢ = рд╕реНрдерд╛рди [рдХреЛ реж ] ред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ,
  16. рдХреНрд╖реЗрддреНрд░ = рд╕реНрдерд╛рди [ реи ] ред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ,
  17. рд╢рд╣рд░ = рд╕реНрдерд╛рди [ реи ] ред innerText
  18. } ;
  19. }
  20. }
  21. }

рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдФрд░ рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд░реЛрдЬрдЧрд╛рд░ рднреА - рдЗрд╕рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд░рд┐рдХреНрддрд┐ рдХреЗ рд▓рд┐рдВрдХ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдЖрдИрдбреА рдореЗрдВ рдЬреНрдЮрд╛рдд рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдереА, рддреЛ рд░рд┐рдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдЖрдИрдбреА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдореЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛:
  1. рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп GetFullInfo ( рд╣рдмрд░рд╛рдЬ рдЬреЙрдм )
  2. {
  3. HtmlDocument html = рдирдпрд╛ HtmlDocument ( ) ;
  4. рдПрдЪрдЯреАрдПрдордПрд▓ред LoadHtml ( wClientред DownloadString ( рдиреМрдХрд░реА Url ) ) ;
  5. // html.LoadHtml (GetHtmlString (job.Url));
  6. // рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :-(
  7. var рддрд╛рд▓рд┐рдХрд╛ = htmlред GetElementbyId ( "рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА" ) ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ [ рез ] ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ [ реп ] ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ [ рез ] ред рдЪрд╛рдЗрд▓реНрдбрдиреЙрдбреНрд╕ [ 2 ] ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ [ рез ] ред рдЪрд╛рдЗрд▓реНрдбрдиреЙрдбреНрд╕ [ 3 ] ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред рдЬрд╣рд╛рдБ ( x => xред Name == "tr" ) ред ToArray ( ) ;
  8. рдлреЙрд░рдЪ ( рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ var tr )
  9. {
  10. рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢реНрд░реЗрдгреА = рддреНрд░ред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред FindFirst ( "рд╡реЗрдВ" ) ред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ;
  11. рд╕реНрд╡рд┐рдЪ ( рд╢реНрд░реЗрдгреА )
  12. {
  13. рдорд╛рдорд▓рд╛ "рдХрдВрдкрдиреА" :
  14. рдиреМрдХрд░реАред рдХрдВрдкрдиреА = trред рдмрд╛рд▓-рдмрдЪреНрдЪреЗ ред FindFirst ( "td" ) ред FirstChildред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ;
  15. рддреЛрдбрд╝рдирд╛ ;
  16. рдорд╛рдорд▓рд╛ "рд╢рд┐рдХреНрд╖рд╛:" :
  17. рдиреМрдХрд░реАред рд╢рд┐рдХреНрд╖рд╛ = рд╣рдмрд░рд╛рдЬред ParseEducation ( рддреНрд░рд┐ред рдЪрд╛рдЗрд▓реНрдбрдиреЛрдбреНрд╕ ред FindFirst ( "td" ) ред рдЗрдирд░ рдЯреЗрдХреНрд╕реНрдЯ ) ;
  18. рддреЛрдбрд╝рдирд╛ ;
  19. рдорд╛рдорд▓рд╛ "рд░реЛрдЬрдЧрд╛рд░:" :
  20. рдиреМрдХрд░реАред рд░реЛрдЬрдЧрд╛рд░ = рд╣рдмрд░рд╛рдЬред ParseEmployment ( рддреНрд░рд┐ред рдЪрд╛рдЗрд▓реНрдбрдиреЙрдбреНрд╕ ред рдлрд╛рдЗрдВрдбрдлрд░реНрд╕реНрдЯ ( "td" ) ред рдЗрдирд░рдЯреЗрдХреНрд╕реНрдЯ ) ;
  21. рддреЛрдбрд╝рдирд╛ ;
  22. рдбрд┐рдлрд╝реЙрд▓реНрдЯ :
  23. рдЬрд╛рд░реА рд░рдЦреЗрдВ ;
  24. }
  25. }
  26. }

рдкрд░рд┐рдгрд╛рдо


рдареАрдХ рд╣реИ, рдлрд┐рд░, рд╣рдо XML рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ Excel-e рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ ... рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдХрдВрдкрдирд┐рдпрд╛рдВ рдпрд╛ рддреЛ рд╡реЗрддрди рдХреА рд░рд╛рд╢рд┐ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ, рдпрд╛ рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджрд┐рдЦрд╛рддреА рд╣реИрдВ (рднреВрд▓ рдЬрд╛рдУ, рд╢рд░реАрд░ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рд░рд┐рдХреНрддрд┐рдпреЛрдВ, рдпрд╛ рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рд╣реАрди), рдпрд╛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдБ xlsx рдФрд░ xml рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рд╣реИ

рдкреБрдирд╢реНрдЪ


рдЬрдм рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдереА - рдкреГрд╖реНрда рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реБрдПред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╣рд▓реЗ WebClient рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдлрд┐рд░ WebRequest рдХреА, рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рд╛ред рдПрдХ Google рдЦреЛрдЬ рдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдХреЛрдб рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред

Source: https://habr.com/ru/post/In112325/


All Articles