Форум сайта python.su
Доброго времени суток. Прошу помощи у знающих мастеров клавиатуры и мышки! Проблема в следующем Паук лазает по сайту и даже дергает поле - (Имя и Год), но вот поле цены к сожелению отказывается дергать(просто его пропускает, без каких либо объяснений). Поля проверяю на возможность их нахождения на странице с помощью - FirePath(все поля благопалучно были найдены). Вот собственно исходники:
import re
from scrapy.item import Item, Field
from scrapy.contrib.loader.processor import MapCompose
class StelsItem(Item):
name = Field()
price = Field()
coll = Field()
==========================================
import re
from stels.items import StelsItem
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import Compose
from scrapy.contrib.loader.processor import MapCompose
from scrapy.contrib.loader.processor import TakeFirst
from scrapy.contrib.spiders import CrawlSpider
from scrapy.contrib.spiders import Rule
from scrapy.selector import HtmlXPathSelector
class StelsLoader(XPathItemLoader):
default_input_processor = MapCompose(lambda s: re.sub('\s+', ‘ ’, s.strip()))
default_output_processor = TakeFirst()
class StelsSpider(CrawlSpider):
name = “stels”
allowed_domains =
start_urls =
rules = (
Rule(SgmlLinkExtractor(allow'sort\.aspx\?.+')), follow=True),
Rule(SgmlLinkExtractor(allow'item\.aspx\?.+')), callback='parse_item'),
)
def parse_item(self, response):
hxs = HtmlXPathSelector(response)
l = AiteaLoader(AiteaItem(), hxs)
l.add_xpath('name', '//h1/span/text()')
l.add_xpath('price', '//span/text()')
l.add_xpath('coll', '//span/text()')
return l.load_item()
Отредактировано Kobalt (Апрель 3, 2012 16:17:09)
Офлайн
вопрос собственно в том что Поле цены не парсится, хотя с другими полями таких проблем не возникло
Офлайн
Вообще-то из названия лоадера и айтема понятно, что за сайт .
Можно попробовать так:
price_xpath = '(//h2/span/text())[1]' # coll - количество? тогда quantity_xpath = '(//h2/span/text())[2]'
Офлайн
сделал так - l.add_xpath('price', '//span/b/span/h2/span')
только теперь загвоздка в том что выдергиваются значения такого вида
“<span id=”"ctl00_ContentPlaceHolder1_FormView1_PriceLabel0“”><b><font color=“”#FF3300“” size=“”4“”>1457СЂ</font></b></span> “,,
”<span id=“”ctl00_ContentPlaceHolder1_FormView1_PriceLabel“”><b><font color=“”#FF3300“” size=“”4“”>1824СЂ</font></b></span> ",,
Отредактировано Kobalt (Апрель 3, 2012 16:19:51)
Офлайн
Народ ну обясните, не понимаю!!! Задаю значение
l.add_xpath('price', '//td/span/b/span/h2/spanх@id=“ctl00_ContentPlaceHolder1_FormView1_PriceLabel0”]/text()')
проверяю его на правильность в firepath, все находит правильно
а когда запускаю консоль, не происходин ничего
2012-04-03 19:00:49+0600 DEBUG: Crawled (200) <GET http://aitea.ru/CaiDa
n/Cha/item.aspx?PageID=1119> (referer: None)
2012-04-03 19:00:49+0600 INFO: Closing spider (finished)
Что я делаю не так?
Офлайн
Почему при точном указании поля не парсится значение?
Офлайн
Kobalt, вы мое сообщение читали?
reclosedev
Сначала думал, что можно по id'ам ориентироваться (id=“ctl00_ContentPlaceHolder1_FormView1_PriceLabel0”), но они на разных страницах меняются.
'(//h2/span/text())[1]'
Офлайн
Как корректно написать?
price_xpath = '(//h2/span/text())'
l.add_xpath('price', price_xpath)
Интерпритатор такую запись не воспринимает(((
Офлайн
Проверил в консоли Scrapy, оказывается нужно //text(), хотя в XPath Helper1.0.8 и старый вариант работает.
l.add_xpath('price', '(//h2/span//text())[1]') l.add_xpath('coll', '(//h2/span//text())[2]')
Отредактировано reclosedev (Апрель 3, 2012 19:51:58)
Офлайн
помогло! СПАСИБО!
кстати а как на python 2.6 поставить графический интерфейс среды программирования, ато както сидет под консолью скучновато
Офлайн