рдЧреНрд░реИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╛рдЗрдбрд░

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рдореИрдВ рдУрдкрди-рд╕реЛрд░реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЧреНрд░реИрдм рдХрд╛ рдПрдХ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ ( itforge рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ ) рдФрд░ GrabLab рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ 1/2 (рдЬреЛ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ)ред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдХреНрд╕рд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдФрд░ рдХрд╛рд░реНрдп рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЙрди рдФрдЬрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдореЗрд░реЗ рдХрд╛рдо рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░рддреЗ рд╣реИрдВ

рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ HttpFox рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдЖрдиреЗ рд╡рд╛рд▓реЗ / рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ http рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ) рдХреЗ рд╕рд╛рде FireFox рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, XPather (рдЖрдкрдХреЛ xpath рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ), SQLite рдкреНрд░рдмрдВрдзрдХ (рджреЗрдЦреЗрдВ sqlite рдЯреЗрдмрд▓), рдореИрдВ рдИ-рдореЗрд▓ рдореЗрдВ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрдирд┐рдкреЗрдЯ (YASnippets) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╕рдВрд░рдЪрдирд╛рдУрдВред

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


Sql рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ (рдЕрдХреНрд╕рд░ json / xml рдореЗрдВ рдХрдо), рдЖрдкрдХреЛ ORM - SQLAlchemy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рджрд░рдЕрд╕рд▓, рдЧреНрд░реИрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдЦреБрдж рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд┐рдЫрд▓реА рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдкрд░рд┐рдЪрд┐рдд рдереЗ:

1) рдореЙрдбрд▓ рдерд┐рдВрдХрдкреИрдб - рдореИрдВ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ
2) config.py - junga, рд╕реЗрдЯрд┐рдВрдЧреНрд╕, orm рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ settings.py рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧред
3) /spiders/*.py - рдордХрдбрд╝рд┐рдпреЛрдВ рдХрд╛ рдХреЛрдб
4) spider.py рдпрд╛ project_name.py - рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓, рд╕рдорд╡рд░реНрддреА рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдордХрдбрд╝рд┐рдпреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рд╕рд╛рдЗрдЯ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рд╕реЗ рдЬреНрдпрд╛рджрд╛ рддрд▓рд╛рдХрд╢реБрджрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЧреАрдерд░ рдХреЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рдЧрдврд╝ рд╕реЗ рдкрд╛рд░реНрд╕рд░ "рдЯреНрд░реЗрдВрдбрд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕" рдФрд░ "рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕" рд▓рд┐рдЦреЗрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

class Item(Base): __tablename__ = 'item' sqlite_autoincrement = True id = Column(Integer, primary_key=True) title = Column(String(160)) author = Column(String(160)) description = Column(String(255)) url = Column(String(160)) last_update = Column(DateTime, default=datetime.datetime.now) 


рдЗрд╕рдХреЗ рдмрд╛рдж, config.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрд░рдВрднрд┐рдХ orm рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЗрдмрд▓ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (default_spider_params) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдкрд╛рдЗрдбрд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА рдордХрдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИред

 def init_engine(): db_engine = create_engine( 'sqlite+pysqlite:///data.sqlite', encoding='utf-8') Base.metadata.create_all(db_engine) return db_engine db_engine = init_engine() Session = sessionmaker(bind=db_engine) def default_spider_params(): params = { 'thread_number': MAX_THREADS, 'network_try_limit': 20, 'task_try_limit': 20, } if USE_CACHE: params.update({ 'thread_number': 3, 'use_cache': True, 'cache_db': CACHE_DB, 'debug_error' :True, }) return params 


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдкрд░ рдореЛрдВрдЧреЛрдбрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреИрд╢ рдХреЛ рдЕрдХреНрд╖рдо рдмрдирд╛рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдмрд╕ USE_CACHE = рдЧрд▓рдд рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред SAVE_TO_DB рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ / рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕реЗ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2a рдордХрдбрд╝рд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА, рдкрд╣рд▓реА "рдЯреЙрдк рдЯреНрд░реЗрдВрдбрд┐рдВрдЧ" рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА 5 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдФрд░ рджреВрд╕рд░реА "рдореЛрд╕реНрдЯ рд╡рд╛рдЪреНрдб рдкрд╛рдпрдерди" рд╣реЛрдЧреАред

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

рд╣рдо OOP рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ BaseHubSpider рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдо 2a рдХреЛ рдмрдЪрд╛рдиреЗ () рдФрд░ log_progress () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

 class BaseHubSpider(Spider): initial_urls = ['http://github.com'] items_total = 0 def save(self, data): if not SAVE_TO_DB: return session = Session() if not session.query(Item).filter_by(title=data['title']).first(): obj = Item(**data) session.add(obj) session.commit() def log_progress(self, str): self.items_total += 1 print "(%d) Item scraped: %s" % (self.items_total, str) 


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ (рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ):

  XPATH = u'//table[@class="standart-table table"]' + \ u'//tr[th[text() = "%s"]]/td' values = ( ('title', u' '), ('rating', u''), ('categories', u' '), ('description', u''), ) for db_field, field_title in values: try: data[db_field] = get_node_text(grab.xpath( XPATH % field_title, None)).strip() except AttributeError: data[db_field] = '' 


https://github.com/istinspring/grab-default-project-example/blob/master/spiders/lang_python.py

рд╕реНрдкрд╛рдЗрдбрд░ рдХреЛрдб рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 20 рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдЬрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЛ

  repos = grab.xpath_list( '//table[@class="repo"]//tr/td[@class="title"]/..') for repo in repos: data = { 'author': repo.xpath('./td[@class="owner"]/a/text()')[0], 'title': repo.xpath('./td[@class="title"]/a/text()')[0],} 

repos = Grab.xpath_list ('') - lxml рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Grab.xpath ('') рдкрд╣рд▓рд╛ рддрддреНрд╡ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ xpath рдПрдХ рд╣рдбрд╝рдкрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рд╡рд┐рдзрд┐ рд╣реИ, рдЕрд░реНрдерд╛рдд repo.xpath ('./ h3 / a [1] / text ()') рд▓реВрдк рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдпрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ рдпрджрд┐ lxml xpath рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЧреНрд░реИрдм рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ xpath рдФрд░ lxml рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ xpath рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ (рдпрд╛ рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХреЗрдВ), рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА ['рдХреБрдЫ'] рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

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

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

рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ Grablab@conference.jabber.ru рдкрд░ рдПрдХ рдЬреИрдмрд░ рдХреЙрдиреНрдлреНрд░реЗрдВрд╕ рдХреА рд╣реИ

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


All Articles