2014-12-15 3 views
0

Я работаю над этим пауком уже несколько месяцев и застрял в одной и той же проблеме - может ли кто-нибудь помочь мне?Scrapy не снимает жирный текст

На указанном веб-сайте (см. Ниже) все данные инструмента соскабливаются ЗА ИСКЛЮЧЕНИЕМ для жирных «имен моделей». Это бесит, и я в недоумении, насколько это возможно.

import re 
import json 
from urlparse import urlparse 


from scrapy.selector import Selector 
try: 
    from scrapy.spider import Spider 
except: 
    from scrapy.spider import BaseSpider as Spider 
from scrapy.utils.response import get_base_url 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors import LinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from database.items import databaseItem 

from scrapy.log import * 

class CommonSpider(CrawlSpider): 
    name = 'brands.py' 
    allowed_domains = ['usedprice.com'] 
    start_urls = ['http://www.usedprice.com/items/guitars-musical-instruments/index.html'] 

    rules = (

     Rule(LinkExtractor(allow=()), callback='parse_item'), 
    ) 


    def parse_item(self, response): 
     hxs = HtmlXPathSelector(response) 
     item = databaseItem() 
     datao = datao = hxs.xpath('//tr[@class="oddItemColor baseText"]') 
     datae = datae = hxs.xpath('//tr[@class="evenItemColor baseText"]') 
     tmpNextPage = hxs.xpath('//div[@class="baseText blue"]/span[@id="pnLink"]/a/@href').extract() 
     for attr in datao: 
      *modelInfo = attr.xpath('.//b/text()').extract()* 
      instrInfo = attr.xpathxpath('.//td//text()').extract() 
      item['modelInfo'].append = modelInfo 
      item['instrInfo'].append = instrInfo 
      return databaseItem(modelInfo = modelInfo[1:], instrInfo = instrInfo[2:]) 
     for attr in datae: 
      *modelInfo = attr.xpath('.//b/text()').extract()* 
      instrInfo = attr.xpath('.//td//text()').extract() 
      item['modelInfo'].append = modelInfo 
      item['instrInfo'].append = instrInfo 
      return databaseItem(modelInfo = modelInfo[1:], instrInfo = instrInfo[2:]) 
+0

Исправьте свой отступ, добавьте код для * databaseItem *, чтобы мы могли протестировать код без написания заглушек. Кроме того, дайте понять, что именно строка должна получить текст, как результат должен выглядеть, и как он выглядит сейчас. Таким образом, я не хочу делать отладки с самого начала. Знание Xpath, которое является проблемой, уменьшает отладку несколько раз. – bosnjak

+0

Спасибо. Я исправил свои ошибки и выделил линии, которые должны захватить имена моделей. – page

ответ

0

Вы должны:

  • используют точные индексы массива (вместо ломтиков), чтобы забрать modelInfo поле
    • [0][1:] == []
  • yield каждый databaseItem вместо того, чтобы вернуться
  • добавить логику для определения того или нет жирным шрифтом текст на самом деле то, что вы хотите
    • каждый второй строки в таблице интерес «Описание» жирным шрифтом, а не «столбец» для «Тип» информации

(я не запустить свой код, но я смотрю на http://www.usedprice.com/items/guitars-musical-instruments/a-basses/index.html)

Смежные вопросы