Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2014 21:21:57

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

grab spider сделать два подряд select'a

Хочу собрать списки сайтов из LI

# -*- coding: UTF-8 -*-
import logging
from grab.spider import Spider, Task
from grab import Grab
class SimpleSpider(Spider):
    
	initial_urls = ['http://www.liveinternet.ru/rating/banks/month.html?page=' + str(i+1) for i in xrange(1)]
	results = []
	def task_initial(self, grab, task):
		
		for g in grab.doc.select('//table/tr[@class="high"]'):
			
			print g.html().encode('utf8')
                        #print g.select('//tr').html().encode('utf8')
if __name__ == '__main__':
	logging.basicConfig(level=logging.DEBUG)
	bot = SimpleSpider()
	bot.run()
	#print bot.render_stats()

вопрос, как мне применить select к g ? Я пробую делать g.select('//tr') но получается, что идет select со всей страницы, а не из выборки grab.doc.select('//table/tr')

задача получить вложенный список из пар значений url и количество поситетелей



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#2 Янв. 29, 2014 21:37:00

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

grab spider сделать два подряд select'a

# может быть надо экранировать (), не помню
sites = grab.xpath_text('//a[@onclick="cl(this)"]/@name')
sites = grab.xpath_text('//a[@onclick="cl\(this\)"]/@name')
# А можно и так сделать 
sites = grab.xpath_text('//a/@name')
# Оказывается я уже старичок :) Вот к чему приводит людей python3.. 
# вот так работает 
from grab import Grab
g = Grab()
g.go('http://www.liveinternet.ru/rating/banks/month.html?page=1')
sites = [x.text() for x in g.doc.select('//a/@name')]
# Чтобы получить еще и посещаемость надо заюзать это 
'//a/@name | //tr[@class="high"]/td[3]/text()'
# советую почитать доку по lxml




Отредактировано kise97 (Янв. 29, 2014 21:49:56)

Офлайн

#3 Янв. 30, 2014 04:24:11

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

grab spider сделать два подряд select'a

ajib6ept

for g in grab.doc.select('//table/tr[@class="high"]'):
    g.select('.//tr')

Отредактировано Singularity (Янв. 30, 2014 04:24:33)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version