рдкрдХрдбрд╝реЛ - рдПрдХ HTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдбреЛрдо рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕

рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рднреНрд░рдордг


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╣рдбрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЗрдмрд░ рдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ - рд╕рд╛рдЗрдЯ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛: рдПрдХ , рджреЛ , рддреАрди , рдЪрд╛рд░ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЧреНрд░рдм рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЖрд╕рд╛рди рд╢реЗрд▓ рд╣реИ: рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП pycurl рдФрд░ рдкрд╛рд░реНрд╕рд▓ HTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП lxmlред

Lxml рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ DOM рдЯреНрд░реА рд╕реЗ XPATH рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рдПрд▓реАрдореЗрдВрдЯрдЯреНрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХрдИ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╣реЙрд░реНрдирдмреАрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ xpath рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:

>>> from grab import Grab >>> g = Grab() >>> g.go('http://habrahabr.ru/') <grab.response.Response object at 0x7fe5f7189850> >>> print g.xpath_text('//title')    /  /  


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИ:

 >>> from urllib import urlopen >>> from lxml.html import fromstring >>> data = urlopen('http://habrahabr.ru/').read() >>> dom = fromstring(data) >>> print dom.xpath('//title')[0].text_content()    /  /  


Xpath_text рд╡рд┐рдзрд┐ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдзрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, xpath_text рд╡рд┐рдзрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡реЛрдВ рд╕реЗ рдкрд╛рда рднреА рдирд┐рдХрд╛рд▓рддреА рд╣реИред ред рдЕрдЧрд▓рд╛, рдореИрдВ рдЙрдирдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЧреНрд░реИрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рджреЗрддрд╛ рд╣реВрдВ:



рдмрд┐рдирд╛ рд╢рд░реНрдорд┐рдВрджрдЧреА рдХреЗ рдирд╣реАрдВред Grab.xpath рд╡рд┐рдзрд┐ - рдЪрдпрди рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ ElementTree рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА xpath рд╡рд┐рдзрд┐ рдкреВрд░реА рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИред рдЗрд╕ рд░реЗрдХ рдХреЛ рд▓реЗрдХрд░ рд▓реЛрдЧ рдмрд╛рд░-рдмрд╛рд░ рд╕рд╛рдордиреЗ рдЖрдПред рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реАрдПрд╕рдПрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реА рд╕реЗрдЯ рдерд╛ рдпрд╛рдиреАред Grab.css, Grab.css_list, Grab.css_text, рдЖрджрд┐, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ XPATH рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ XPATH рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдХреЛрдб рдореЗрдВ CSS рдФрд░ XPATH рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдорд╢реНрдорд╢ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХрдИ рдиреБрдХрд╕рд╛рди рдереЗ:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬрдм рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓реЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреВрд░реЗ рдЧреНрд░реИрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдирд╛ рдерд╛ред рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ: рдпрд╛ рддреЛ рд╣рдо рдПрдХ рдЧреНрд░реИрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рд╣рдо рдПрдХ рдирдВрдЧреЗ рдбреЛрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ xpath_textред

рджреВрд╕рд░реА рдмрд╛рдд, Grab.xpath рдФрд░ Grab.xpath_list рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдирдВрдЧреЗ рдПрд▓рд┐рдореЗрдВрдЯрдЯреНрд░реА рддрддреНрд╡ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрдм xpath_text рдЬреИрд╕реЗ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВред

рддреАрд╕рд░рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдЧреНрд░реИрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рд╕реНрдерд╛рди рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред

рдУрд╣, рдФрд░ рдЪреМрдерд╛ред рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рд╕реЗ рдЭрд┐рдЭрдХ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рдерд┐рдпрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХрд╛ HTML рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред xxpath рдФрд░ Grab.xpath_list рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд▓реЛрдЧ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рд╣рдбрд╝рдмрдбрд╝реА рдХреЗрд╡рд▓ lxml рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмрд╕ lxml.de рдкрд░ рдореИрдиреБрдЕрд▓ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

DOM рдЯреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реЗрдкреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреАред рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ



рдЪрдпрдирдХрд░реНрддрд╛, рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдпреЗ ElementTree рддрддреНрд╡реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЖрд╡рд░рдг рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдкреВрд░рд╛ рдбреЛрдо рдЯреНрд░реА рдПрдХ рдЖрд╡рд░рдг рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛рдиреА рд░реИрдкрд░ рд░реВрдЯ html рддрддреНрд╡ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдЪрдпрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ XPATH рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдЖрд╡рд░рдг рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ

 >>> from grab.selector import Selector >>> from lxml.html import fromstring >>> root = Selector(fromstring('<html><body><h1>Header</h1><ul><li>Item 1</li><li><li>item 2</li></ul><span id="color">green</span>')) 


рдЕрдм рдЪрдпрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЪрдпрди рдХрд░реЗрдВ, рд╣рдореЗрдВ рдирдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред рд╣рдо рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ () рд╡рд┐рдзрд┐ рднреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ElementTree рддрддреНрд╡ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдиреЛрдб рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 >>> root.select('//ul') <grab.selector.selector.SelectorList object at 0x7fe5f41922d0> >>> root.select('//ul')[0] <grab.selector.selector.Selector object at 0x7fe5f419bed0> >>> root.select('//ul')[0].node <Element ul at 0x7fe5f41a7a70> >>> root.select('//ul').one() <grab.selector.selector.Selector object at 0x7fe5f419bed0> 


рдкрд╛рдП рдЧрдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдкрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ? рд╣рдо рдкрд╛рда рд╕рд╛рдордЧреНрд░реА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд╛рдордЧреНрд░реА рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 >>> root.select('//ul/li')[0].text() 'Item 1' >>> root.select('//ul/li')[0].number() 1 >>> root.select('//ul/li/text()')[0].rex('(\w+)').text() 'Item' 


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдЪрдпрдирд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрди рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 >>> root.select('//ul/li').text() 'Item 1' >>> root.select('//ul/li').number() 1 >>> root.select('//ul/li/text()').rex('em (\d+)').text() '1' >>> root.select('//ul/li/text()').rex('em (\d+)').number() 1 


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

 >>> root.select('//span')[0].html() u'<span id="color">green</span>' >>> root.select('//span').exists() True >>> root.select('//god').exists() False >>> root.select('//ul')[0].select('./li[3]').text() 'item 2' 


рдЧреНрд░реИрдм рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕реАрдзреЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ? рдбреЙрдХреНрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк DOM рдЯреНрд░реА рдХреЗ рд░реВрдЯ рдЪрдпрдирдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрдЪреНрдЫрд┐рдд рдЪрдпрди рдХреЗ рд▓рд┐рдП рдЪрдпрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 >>> from grab import Grab >>> g = Grab() >>> g.go('http://habrahabr.ru/') <grab.response.Response object at 0x2853410> >>> print g.doc.select('//h1').text()   ,      MIT    >>> print g.doc.select('//div[contains(@class, "post")][2]')[0].select('.//div[@class="favs_count"]').number() 60 >>> print g.doc.select('//div[contains(@class, "post")][2]')[0].select('.//div[@class="favs_count"]')[0].html() <div class="favs_count" title=" ,    ">60</div> 


рдЧреНрд░реИрдм рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рдХрд╛рдлреА рдХрдЪреНрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред

рдЬрд┐рдк рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рдЪрдпрдирдХрд░реНрддрд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рднрдВрдбрд╛рд░ рд╕реЗ рдкрдХрдбрд╝реЛ: bitbucket.org/lorien/grab ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рд╣реИ

рдореИрдВ рдХрдВрдкрдиреА GrabLab рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реВрдВ - рд╣рдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВ, рдЧреНрд░реИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рди рдХреЗрд╡рд▓ред рдпрджрд┐ рдЖрдкрдХреА рдХрдВрдкрдиреА рдЧреНрд░реИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЧреНрд░реИрдм рдХреЗ рд╢реЛрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдорд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles