Я соскабливаю сайт, просматривая страницу поиска, а затем просматривая все результаты. Однако, похоже, он возвращает только первый результат для каждой страницы. Я также не думаю, что это ударит по результатам стартовой страницы.Scrapy: Цитирование по результатам поиска возвращает только первый элемент
Во-вторых, цена возвращается как какой-то Юникод (символ £) - как я могу ее вообще удалить, просто оставив цену?
'regular_price': [u'\xa38.59'],
Вот HTML: http://pastebin.com/F8Lud0hu
Вот паук:
import scrapy
import random
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from cdl.items import candleItem
class cdlSpider(CrawlSpider):
name = "cdl"
allowed_domains = ["www.xxxx.co.uk"]
start_urls = ['https://www.xxxx.co.uk/advanced_search_result.php']
rules = [
Rule(LinkExtractor(
allow=['advanced_search_result\.php\?sort=2a&page=\d*']),
callback='parse_listings',
follow=True)
]
def parse_listings(self, response):
sel = Selector(response)
urls = sel.css('a.product_img')
for url in urls:
url = url.xpath('@href').extract()[0]
return scrapy.Request(url,callback=self.parse_item)
def parse_item(self, response):
candle = candleItem()
n = response.css('.prod_info_name h1')
candle['name'] = n.xpath('.//text()').extract()[0]
if response.css('.regular_price'):
candle['regular_price'] = response.css('.regular_price').xpath('.//text()').extract()
else:
candle['was_price'] = response.css('.was_price strong').xpath('.//text()').extract()
candle['now_price'] = response.css('.now_price strong').xpath('.//text()').extract()
candle['referrer'] = response.request.headers.get('Referer', None)
candle['url'] = response.request.url
yield candle
Спасибо, переход от возврата scrapy.Request (URL, обратного вызова = self.parse_item) To: выход scrapy.Request (url, callback = self.parse_item) Работает отлично. –
Привет, следующий вопрос извините. Некоторые из цен, которые я соскабливаю, входят в тысячи и форматируются запятой, например, 1 190,00 фунтов стерлингов. С этими условиями условие регулярного выражения будет соответствовать цене здесь как «1». Нормальные цены работают нормально. У вас есть предложение о том, как изменить это? Спасибо –
Измените регулярное выражение '' \ d + \.? \ D * ''на'' (?: \ D {1,3} [, \.]) * \ D \ d'', которое должно сделать трюк. – Guillaume