Найти - Пользователи
Полная версия: Scrapy-problem
Начало » Центр помощи » Scrapy-problem
1 2
Kobalt
Доброго времени суток. Прошу помощи у знающих мастеров клавиатуры и мышки! Проблема в следующем Паук лазает по сайту и даже дергает поле - (Имя и Год), но вот поле цены к сожелению отказывается дергать(просто его пропускает, без каких либо объяснений). Поля проверяю на возможность их нахождения на странице с помощью - 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
вопрос собственно в том что Поле цены не парсится, хотя с другими полями таких проблем не возникло
reclosedev
Вообще-то из названия лоадера и айтема понятно, что за сайт .

Можно попробовать так:
price_xpath = '(//h2/span/text())[1]'
# coll - количество? тогда
quantity_xpath = '(//h2/span/text())[2]'

Сначала думал, что можно по id'ам ориентироваться (id=“ctl00_ContentPlaceHolder1_FormView1_PriceLabel0”), но они на разных страницах меняются.
Kobalt
сделал так - 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>&#13; &#13;“,,
”<span id=“”ctl00_ContentPlaceHolder1_FormView1_PriceLabel“”><b><font color=“”#FF3300“” size=“”4“”>1824СЂ</font></b></span>&#13; &#13;",,

Kobalt
Народ ну обясните, не понимаю!!! Задаю значение
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
Kobalt, вы мое сообщение читали?

reclosedev
Сначала думал, что можно по id'ам ориентироваться (id=“ctl00_ContentPlaceHolder1_FormView1_PriceLabel0”), но они на разных страницах меняются.

Вариант с
'(//h2/span/text())[1]'
должен работать
Kobalt
Как корректно написать?
price_xpath = '(//h2/span/text())'
l.add_xpath('price', price_xpath)
Интерпритатор такую запись не воспринимает(((
reclosedev
Проверил в консоли Scrapy, оказывается нужно //text(), хотя в XPath Helper1.0.8 и старый вариант работает.

l.add_xpath('price', '(//h2/span//text())[1]')
l.add_xpath('coll', '(//h2/span//text())[2]')
Если ‘coll’ - это сбор, то 2 -> 3
Kobalt
помогло! СПАСИБО!
кстати а как на python 2.6 поставить графический интерфейс среды программирования, ато както сидет под консолью скучновато
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