рдмреЗрдВрдЪрдорд╛рд░реНрдХ HTML рдкрд╛рд░реНрд╕рд░

рдореИрдВрдиреЗ рдПрдХ рджреНрд╡реАрдк рдореЗрдВ рдкрд╛рдпрдерди рд╕реЗ рдПрд░рд▓рд╛рдВрдЧ рддрдХ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдХреЙрдкреА рдХрд┐рдпрд╛ ред рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ HTTP рдкрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ HTML рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдирд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИред рд╕реЗрд╡рд╛ рдХрд╛ рдореБрдЦреНрдп CPU рд▓реЛрдб DOM рдЯреНрд░реА рдореЗрдВ HTML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкрд╛рдпрдерди рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП lxml.etree.HTML () рдХреЗ рд╕рд╛рде рдПрд░рд▓рдВрдЧ рдореЛрдЪреАрд╡реЗрдм_рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЦрд░реНрдЪ рдХрд┐рдпрд╛, рдЖрд╡рд╢реНрдпрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдмрдирд╛рдпрд╛, рдФрд░ рдлрд┐рд░ рд╕реЛрдЪрд╛ рдХрд┐ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЕрдзрд┐рдХ рдкрд╛рд░реНрд╕рд░реНрд╕ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдмрдирд╛рдПрдВ, рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВред
рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдореЗрдВ рдПрд░рд▓рд╛рдВрдЧ , рдкрд╛рдпрдерди , PyPy , NodeJS рдФрд░ C рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:

рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░реНрд╕рд░ рдХреЗ рдПрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рдФрд░ рдЪрд░рдо рдореЗрдореЛрд░реА рдЦрдкрдд рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдЬрд╝рд┐рд╢: рдХреМрди рддреЗрдЬрд╝ рд╣реИ - рдЕрдЬрдЧрд░ рдпрд╛ PyPy? Erlang рдЗрдореНрдпреБрдирд┐рдЯреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЧрддрд┐ рдФрд░ рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ? V8 NodeJS рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рд╣реИ? рдФрд░ рд╢реБрджреНрдз C рдореЗрдВ рдХреЛрдб рдпрд╣ рд╕рдм рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ?

рдорд╛рдорд▓реЗ


рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдПрдВ?

рдЧреИрд░-рд╕рдЦреНрдд HTML рдкрд╛рд░реНрд╕рд░ рдПрдХ HTML рдкрд╛рд░реНрд╕рд░ рд╣реИ рдЬреЛ рдЕрдорд╛рдиреНрдп HTML рдХреЛрдб (рдЕрд╕реВрдЪреАрдмрджреНрдз рдЯреИрдЧ, рд╕рдВрдХреЗрдд > < рдЕрдВрджрд░ <script> рдЯреИрдЧ, рдЕрдирд╕реНрдкреИрдкреНрдб рдПрдореНрдкрд░рд╕реЗрдВрдб & рд╡рд░реНрдг, рдмрд┐рдирд╛ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдЖрджрд┐ рдХреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЯреВрдЯреЗ рд╣реБрдП HTML рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЙрд╕ рд░реВрдк рдореЗрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ HTML рдПрдХ рдбрд┐рдЧреНрд░реА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдЕрдорд╛рдиреНрдп рд╣реИрдВ!
DOM рдЯреНрд░реА - рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓, рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, DOM рд╡рд╣ API рд╣реИ рдЬреЛ HTML рдбреЙрдХреНрдпреВрдореЗрдВрдЯреНрд╕ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдЬреИрд╕рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рдореЗрдВ <html> рддрддреНрд╡ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЪреНрдЪреЗ <head> рдФрд░ <body> рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдореЗрдВ, рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
 <html lang="ru-RU"> <head></head> <body>Hello, World!</body> </html> 

рдЖрдк рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ
 ("html", {"lang": "ru-RU"}, [ ("head", {}, []), ("body", {}, ["Hello, World!"]) ]) 

рдЖрдорддреМрд░ рдкрд░, HTML рд░реВрдкрд╛рдВрддрд░рдг рдпрд╛ рдбреЗрдЯрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП DOM рдЯреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреЗрдбрд╝ рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП XPath рдпрд╛ CSS рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдкреНрд░рддрд┐рдпреЛрдЧрд┐рдпреЛрдВ




рд▓рдХреНрд╖реНрдпреЛрдВ


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, HTML рдкрд╛рд░реНрд╕рд┐рдВрдЧ (рд╕рд╛рде рд╣реА JSON) рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВ рдЬреИрд╕реЗ "рдЕрдЧрд▓реЗ 10Kb рдПрдХ рдареЛрд╕ рдкрд╛рда рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред" рдпрджрд┐ рд╣рдо рдкрд╛рда рдореЗрдВ <p> рдЯреИрдЧ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ </ рдирд┐рд░реНрдорд╛рдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмрд╛рдж рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ HTML рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╣рдореЗрдВ "2 рдмрд╛рд░ рд╕рдм рдХреБрдЫ рдЬрд╛рдВрдЪрдиреЗ" рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо <option> рд╕реЗ рдорд┐рд▓реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ рдХрд┐ рд╣рдо рд╕рдорд╛рдкрди </option> рд╕реЗ рдорд┐рд▓реЗрдВрдЧреЗред рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ, рд╡рд╣ рд╣реИ рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдмрдЪрдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреВрд░рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ <html>...100 ... &amp; ... 100 ...</html> <html>...100 ... &amp; ... 100 ...</html> , рддреЛ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкреВрд░реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - "& amp;", "&" рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЧрдпрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдкрд╛рд░реНрд╕рд░ рдРрд╕реЗ рдкрд╛рда рдХреЛ 3 рдореЗрдВ рддреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ; рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯреБрдХрдбрд╝реЗ)ред

рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ - рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝, рдХрдИ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░, рдУрд╡рд░рд╣реЗрдб рдкрд░ рд╕рдЦреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░рд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

рд╣рдо рдЯреВрдЯреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╡рд╕реВрд▓реА рдХреА рдкреВрд░реНрдгрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╛рд░реНрд╕рд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдПрдкреАрдЖрдИ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рддреБрд▓рдирд╛ рднреА рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА


рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдореЛрд░реА рдореЗрдВ рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рдмрд╛рд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрди рдмрд╛рд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдбреЛрдо рдЯреНрд░реА рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реВрдк рдХреЗ рд░рди рдЯрд╛рдЗрдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрд╕рд░ рдХреЛ N = 10, 50, 100, 400, 600 рдФрд░ 1000 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдХрдИ HTML рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдпреВрдЬрд░ рд╕реАрдкреАрдпреВ, рд╕рд┐рд╕реНрдЯрдо рд╕реАрдкреАрдпреВ, рд░рд┐рдпрд▓ рд░рдирдЯрд╛рдЗрдо рдФрд░ (рд▓рдЧрднрдЧ?) рдкреАрдХ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЛ /usr/bin/time рдорд╛рдкрддреЗ рд╣реИрдВред
HTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝:

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдХрд╛рд░ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдк рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реА рдмрд╣реБрдд рд╕рдордп рд▓рдЧ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреЗрдЬ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред UPD: рд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╣рдо TOP1000 рдПрд▓реЗрдХреНрд╕рд╛ рд╕реЗ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗред

рдореИрдВрдиреЗ Ubuntu 3.5.0-19-рдЬреЗрдиреЗрд░рд┐рдХ x86_64 рдкрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП, рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7-3930K CPU @ 3.20GHz ├Ч 12. (рдпрджрд┐ 12 рдХреЛрд░ рдХреЗ рд▓рд┐рдП, рддреЛ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ? рдПрд╣ ...)

рдХреЛрдб


рд╕рднреА рдХреЛрдб github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ README рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВред рдирд╣реАрдВ рднреА - рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ!
рдпреБрдХреНрддрд┐: рдпрджрд┐ рдЖрдк рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдХреЗрд╡рд▓ рднрд╛рдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП Erlang рдпрд╛ PyPy рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ), рддреЛ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ PLATFORMS рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде-рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА (PHP? рдЬрд╛рд╡рд╛? .NET? рд░реВрдмреА?), рдореИрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ (рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ - рд▓рд┐рдмрдХреНрд╕рдПрдордПрд▓ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд░реНрд╕ рдЖрдорддреМрд░ рдкрд░ рдЧрддрд┐ рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ)ред рдХреБрдЫ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк HTML рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЯреИрдЧреНрд╕ рдХреЗ рдмрдбрд╝реЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ, рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░) рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред

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


рдпрд╣рд╛рдБ CSV рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрдЪреНрдЪреЗ рдорд╛рдк рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ -1000 . csv рдкрд░рд┐рдгрд╛рдо -600.csv рдкрд░рд┐рдгрд╛рдо -400.csv рдкрд░рд┐рдгрд╛рдо -100.csv рдкрд░рд┐рдгрд╛рдо -50.csv рдкрд░рд┐рдгрд╛рдо-10 . csv ред рдЖрдЗрдП рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЖрд░ рднрд╛рд╖рд╛ (рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд) рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЧрддрд┐


рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкрд╛рд░реНрд╕рд░ рдХреА рдЧрддрд┐ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо [рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рдкреГрд╖реНрда] рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдкреГрд╖реНрда рдХреЛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рддред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдкрд╛рд░реНрд╕рд░ рдХреА рдЧрддрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдпрд╣ ( рдЬреЗрдЖрдИрдЯреА рдХреЗ рдХрд╛рд░рдг , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдмрдврд╝рдиреА рдЪрд╛рд╣рд┐рдПред
рд╕рднреА рд░реЗрдЦрд╛рдВрдХрди рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ! рдЖрдБрдЦреЗрдВ рдордд рддреЛрдбрд╝рдирд╛!

рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдирд┐рд░реНрднрд░рддрд╛ (рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ HTML рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд╕реВрдЪреА)ред
html_parser_bench_pre-001 html_parser_bench_pre-002 html_parser_bench_pre-003 html_parser_bench_pre-004
рдПрдХ рд╣реА рдКрдВрдЪрд╛рдИ рдХреЗ рдХреЙрд▓рдо - рдЕрдЪреНрдЫрд╛, рдЕрд▓рдЧ - рдмреБрд░рд╛ред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд╛рд░реНрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ (рд╕рднреА рдХреЙрд▓рдо рд╕рдорд╛рди рдКрдВрдЪрд╛рдИ рд╣реИрдВ)ред PyPy рдХреЗ рддрд╣рдд рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж BeautifulSoup 4 рдФрд░ html5lib рд╣реИрдВ; рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдШрдЯ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ PyPy рдкрд░ рдЖрдкрдХрд╛ рдкрд╛рд░реНрд╕рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдзреАрд░реЗ-рдзреАрд░реЗ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдЪрд╛рдирдХ ...

рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд╛рд░реНрдЯ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреГрд╖реНрда рдХреА рдФрд╕рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рд╣реИред рдПрдХ рдмреЙрдХреНрд╕-рдкреНрд▓реЙрдЯ рдЖрд░реЗрдЦ рдмрдирд╛рдПрдБред
рдХрд┐рд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рд╕рдордпред
html_parser_bench_pre-005 html_parser_bench_pre-006 html_parser_bench_pre-007 html_parser_bench_pre-008
рдмреЙрдХреНрд╕ рдЬрд┐рддрдирд╛ рдКрдБрдЪрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдзреАрдорд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрдбрд╝рд╛ рдмреЙрдХреНрд╕, рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рд╕рд╛рд░ (рдпрд╛рдиреА, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдЕрдзрд┐рдХ)ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ C рдореЗрдВ рдкрд╛рд░реНрд╕рд░ рд▓реАрдб рдореЗрдВ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж lxml.etree , рд▓рдЧрднрдЧ NodeJS рдФрд░ Erlang рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рддрдХ рд╕рд╣реА рд╣реИ, рдлрд┐рд░ PyPy рдХреЗ рд▓рд┐рдП bsoup3 parser, CPython рдХреЗ рд▓рд┐рдП persers рдФрд░ рдлрд┐рд░, рдПрдХ рдмрдбрд╝реЗ рдЕрдВрддрд░ рд╕реЗ, PyPy рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рдкрд╛рд░реНрд╕рд░ред рдХреНрдпрд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ! PyPy рд╕рднреА рдХреЛ рдорд┐рд▓рд╛ рджреЗрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ 3 рдкрд╛рд░реНрд╕рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкреГрд╖реНрда рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИ :-)ред

рдЙрджрд╛рд╣рд░рдг рд╕рд╛рд░рдгреАрдмрджреНрдз рдбреЗрдЯрд╛:
  > рд╕рдмрд╕реЗрдЯ (рд░реЗрд╕, (рдлрд╝рд╛рдЗрд▓ == "рдкреЗрдЬ_рдУрдПрдирдПрдЪрдУрдХреЗрдЬреА") & (рд▓реВрдкреНрд╕ == резрежрежреж)) [рд╕реА ("рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо", "рдкрд╛рд░реНрд╕рд░", "рдкрд╛рд░реНрд╕рд░.рд╕", "рд░рд┐рдпрд▓.рд╕", "user.s ")]
     рдордВрдЪ рдкрд╛рд░реНрд╕рд░ parser.s real.s user.s
 6 c-libxml2 libxml2_html_parser.c 2.934295 2.93 2.92
 30 рдПрд░рд▓рд╛рдВрдЧ рдореЛрдЪреАрд╡реЗрдм_рдПрдЪрдЯреАрдПрдордПрд▓ред 13.346997 13.51 13.34
 14 рдиреЛрдбрдЬреНрд╕ рдЪреАрдпрд░рд┐рдпреЛ_рдкрд░рд╕рд░ 5.рдЬреЗрдбред 5.303000 5.37 5.36
 38 рдиреЛрдбрдЬ htmlparser_parser.js 6.686000 6.72 6.71
 22 рдиреЛрдбрдЬ jsdom_parser.js 98.288000 98.42 98.31
 33 pypy bsoup3_parser.py 40.779929 40.81 40.62
 57 pypy bsoup4_parser.py 434.215878 434.39 433.91
 41 pypy html5lib_parser.py 361.008080 361.25 360.46
 65 рдЕрдЬрдЧрд░ bsoup3_parser.py 78.566026 78.61 78.58
 49 рдЕрдЬрдЧрд░ bsoup4_parser.py 33.364880 33.45 33.43
 60 python html5lib_parser.py 200.672682 200.71 200.70
 67 рдЕрдЬрдЧрд░ lxml_parser.py 3.060202 3.08 3.08 


рд╕реНрдореГрддрд┐


рдЕрдм рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдлрд┐рд░ рд╕реЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдмрдирд╛рдПрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рднреА рдХреЙрд▓рдо рд╕рдорд╛рди рдКрдВрдЪрд╛рдИ рдХреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЦрдкрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝рддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдпрд╛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрддред
html_parser_bench_pre-009 html_parser_bench_pre-010
рджрд┐рд▓рдЪрд╕реНрдкред PyPy рдХреЗ рддрд╣рдд Bsoup4 рдФрд░ html5lib рдиреЗ 1MB рдлрд╝рд╛рдЗрд▓ рдкрд░ 1000 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж 5GB рдореЗрдореЛрд░реА рд▓реАред (рдореИрдВ рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ 2 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдХреА рдореЗрдВ рдПрдХ рд╣реА рддрд╕реНрд╡реАрд░ рд╣реИ)ред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рднрд╕реНрдо рд╕реНрдореГрддрд┐ рднреА рд▓рдЧрднрдЧ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рддреА рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ PyPy рдмрд╕ Bsoup4 рдФрд░ html5lib рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ PyPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЬреЛрдЦрд┐рдо рднрд░рд╛ рдХрд╛рд░реНрдп рд╣реИред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрди рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рд╛рде PyPy рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдЧреНрд░рд╛рдлрд╝ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ (Bsoup4 рдФрд░ PyPy рдкрд░ html5lib рдХреЗ рдмрд┐рдирд╛) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрддред
html_parser_bench_dropped_pre-009 html_parser_bench_dropped_pre-010 html_parser_bench_dropped_pre-011 html_parser_bench_dropped_pre-012
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕реА рдореЗрдВ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЙрд▓рдо рд▓рдЧрднрдЧ рдКрдВрдЪрд╛рдИ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред рд╡рд╣реА lxml.etree рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП, 10 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдереЛрдбрд╝реА рдХрдо рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл time рдкрд╛рд╕ рдЗрд╕реЗ рдорд╛рдкрдиреЗ рдХрд╛ рд╕рдордп рди рд╣реЛред NodeJS jsdom parser рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдХреБрдЫ рдкрдиреНрдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреВрджрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдордп рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдХреА рдЦрдкрдд рдореЗрдВ рд╡реГрджреНрдзрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд╢рд╛рдпрдж рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВред

рд╢реЗрд╖ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдореЗрдореЛрд░реА рдЦрдкрдд рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдмреЙрдХреНрд╕-рдкреНрд▓реЙрдЯ рдмрдирд╛рдПрдБред
рдФрд╕рдд рдореЗрдореЛрд░реА рдЦрдкрддред
html_parser_bench_dropped_pre-013 html_parser_bench_dropped_pre-014 html_parser_bench_dropped_pre-015 html_parser_bench_dropped_pre-016
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд╛ рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрд░рд▓рд╛рдВрдЧ рдХреА рдореЗрдореЛрд░реА рдЦрдкрдд рдиреЛрдбреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИред lxml.etree рдХреЛ C libxml2 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкрд╛рд░реНрд╕рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдоред NodeJS рдкрд╛рд░реНрд╕рд░ jsdom рдХреБрдЫ рд╣рдж рддрдХ рддрд╕реНрд╡реАрд░ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп NodeJS рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ ~ 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ DOM рдЯреНрд░реА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдУрд╡рд░рд╣реЗрдб рд╣реИред
рдЙрджрд╛рд╣рд░рдг рд╕рд╛рд░рдгреАрдмрджреНрдз рдбреЗрдЯрд╛:
 > рд╕рдмрд╕реЗрдЯ (рд░реЗрд╕, (рдлрд╝рд╛рдЗрд▓ == "рдкреЗрдЬ_рдУрдПрдирдУрдПрд╕") & (рд▓реВрдкреНрд╕ == резрежрежреж)) [рд╕реА ("рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо", "рдкрд╛рд░реНрд╕рд░", "рдореИрдХреНрд╕ рдЖрд░рдПрд╕рдПрд╕")]
     рдордВрдЪ рдкрд╛рд░реНрд╕рд░ рдЕрдзрд┐рдХрддрдо
 6 c-libxml2 libxml2_html_parser.c 2240
 30 рдПрд░рд▓рд╛рдВрдЧ рдореЛрдЪреАрд╡реЗрдм_рдПрдЪрдЯреАрдПрдордПрд▓ред 21832
 14 рдиреЛрдбрдЬреНрд╕ рдЪреАрдпрд░рд┐рдпреЛ_рдкрд░рд╕рд░ .рдЬреЗрдПрд╕ 49972
 38 рдиреЛрдбрдЬ htmlparser_parser.js 48740
 22 рдиреЛрдбрдЬ jsdom_parser.js 119256
 33 pypy bsoup3_parser.py 61756
 57 pypy bsoup4_parser.py 1701676
 41 pypy html5lib_parser.py 1741944
 65 рдЕрдЬрдЧрд░ bsoup3_parser.py 42192
 49 рдЕрдЬрдЧрд░ bsoup4_parser.py 54116
 60 рдЕрдЬрдЧрд░ html5lib_parser.py 45496
 67 рдЕрдЬрдЧрд░ lxml_parser.py 9364


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░рд┐


рдпрд╣ HTML рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЗрддрдирд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╣реИ рдХрд┐ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЬреЛрдбрд╝ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рд╣реИ)ред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдУрд╡рд░рд╣реЗрдб рд╡рд╣ рд╕рдордп рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реАрдзреЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рддреИрдпрд╛рд░реА рдкрд░ рд╣реИ (рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрд░рдореНрдн рдХрд░рдирд╛, HTML рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдирд╛, рдЖрджрд┐)ред рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕ рд╕рдордп рд╕реЗ рдШрдЯрд╛рддреЗ рд╣реИрдВ рдЬрдм time рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдШрдЯ рдЧрдИ - "time.s", рд╡рд╣ рд╕рдордп рдЬреЛ рдкрд╛рд░реНрд╕рд░ рдЪрдХреНрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдорд╛рдкрд╛ рдЧрдпрд╛ рдерд╛ - "parser.s"ред

html_parser_bench_overhead_pre-001

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд╣реЗрдб рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирдЧрдгреНрдп рд╣реИред рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдПрд░реНрд▓реИрдВрдЧ рдкрд╛рдпрдерди рд╕реЗ рддреБрд▓рдиреАрдп рд╣реИред рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╛рдХреА рд╕реЗ рдЖрдЧреЗ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдб рдЕрдзрд┐рдХ рдирд┐рдХрд▓рд╛)ред

рдЕрдЬрдЧрд░ (lxml.etree.HTML) рдХреЛ libxml2 рдмрд╛рдВрдзрдирд╛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдУрд╡рд░рд╣реЗрдб) рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рдкрд╛рд░реНрд╕рд░ рдПрд▓рдПрдХреНрд╕рдПрдордПрд▓ рд╣реИред

рдирдЧреНрди Erlang рдкрд░ рдкрд╛рд░реНрд╕рд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ, "рд╣рд░ рдЫреАрдВрдХ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ" рдХреЗ Erlang рдХреЗ рдХрд╛рд░рдгред рдЧрддрд┐ NodeJS рдкрд░ рд╕рд░рд▓ рдкрд╛рд░реНрд╕рд░ рдФрд░ рдкрд╛рдпрдерди рдкрд╛рд░реНрд╕рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХреЗрд╡рд▓ C рдФрд░ lxml рдХреЗ рд▓рд┐рдП рдХрдо рд╣реИред рд╕реНрдерд┐рд░рддрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛)ред

NodeJS рдкрд░ рд╕рд░рд▓ рдкрд╛рд░реНрд╕рд░ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдмрдХреНрд╕рдПрдордПрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рдзреАрдорд╛ред V8 рдмреЗрд╣рдж рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдХреЗ рд╕реНрддрд░ рдкрд░ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦрдкрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдмрдврд╝ рд╕рдХрддреА рд╣реИ рдЬрдм рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 10 рд╕реЗ рдмрдврд╝рдХрд░ 100 рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ)ред Jsdom parser рд╕рд░рд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕рд▓рд┐рдП NodeJS рдореЗрдВ HTML рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪреАрдпрд░рд┐рдпреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рд╢реБрджреНрдз рдкрд╛рдпрдерди рдореЗрдВ рдкрд╛рд░реНрд╕рд░реНрд╕ рдЧрддрд┐ рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рджреЛрдиреЛрдВ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдареЛрдВ рдкрд░ рджреГрдврд╝рддрд╛ рд╕реЗ рдХреВрджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рдХреНрдпрд╛ рдЬреАрд╕реА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?)

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд▓реЛрдЧреЛрдВ рдиреЗ PyPy рдХреЛ рдЪреМрдВрдХрд╛ рджрд┐рдпрд╛ред рдпрд╛ рддреЛ рдЬреАрд╕реА рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ, рдпрд╛ рдХрд╛рд░реНрдп рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдкрд╛рд░реНрд╕рд░реНрд╕ рдЕрд╕рдлрд▓ рдереЗ, рдпрд╛ рдореИрдВрдиреЗ рдХрд╣реАрдВ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреА, рд▓реЗрдХрд┐рди PyPy рдкрд░ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред Bsoup3 рдкрд╛рд░реНрд╕рд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди CPython рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╛рдиреА рдХреЗрд╡рд▓ Bsoup3 PyPy рдкрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ CPython рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд▓рд╛рдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн


рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб рдорд╛рдп рдмреНрд▓реЙрдЧ
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓

рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреЗрдЬреЗрдВ! рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ!

рдпреБрдкреАрдбреА:
рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рд░реНрд╕рд░ (рдЪрд╛рд░реНрдЯ, CSV) рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо :
рдЧреЛрд▓рдВрдЧ (3 рдкреАрд╕реА, рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ) (!!!)
рд╣реИрд╕реНрдХреЗрд▓ (рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛)
рдЬрд╛рд╡рд╛ (рдУрдкрдирдЬреЗрдбрдХ, рдСрд░реЗрдХрд▓-рдЬреЗрд░реЗ) (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, ~ 150% рд╕реАрдкреАрдпреВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реАрдкреАрдпреВ> рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдкреАрдпреВ)
рдкрд░реНрд▓
php + рд╕рд╛рдл
рдорд╛рдгрд┐рдХ (рд▓рд┐рдмрд╛рд╕рдорд╛рдЗрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ)
рдбрд╛рд░реНрдЯ (рдмрд╣реБрдд рдзреАрдорд╛)
рдореЛрдиреЛ (2 рдкреАрд╕реА) (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░, рдХрдмреНрдЬреЗ ~ 150% рд╕реАрдкреАрдпреВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реАрдкреАрдпреВ> рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдкреАрдпреВ)

TOP1000 рдПрд▓реЗрдХреНрд╕рд╛ рдкрд░ рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдкрд░ рдЧрддрд┐ рдФрд░ рд╕реНрдореГрддрд┐ рдХреА рдЦрдкрдд рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд▓реЗрдЦ + рдЕрдзреНрдпрдпрди рдмрд╛рдж рдореЗрдВ рд╣реЛрдЧрд╛ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ)ред

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


All Articles