Найти - Пользователи
Полная версия: grab spider сделать два подряд select'a
Начало » Python для новичков » grab spider сделать два подряд select'a
1
ajib6ept
Хочу собрать списки сайтов из 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 и количество поситетелей
kise97
# может быть надо экранировать (), не помню
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




Singularity
ajib6ept
for g in grab.doc.select('//table/tr[@class="high"]'):
    g.select('.//tr')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB